]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blobdiff - store.py
Merge branch 'dev'
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git] / store.py
index f655be538b66f3d81d7fb121a0595ee4ff63ddc7..67e8a8fad7f9ce3698095914351eb4602fe7564d 100644 (file)
--- a/store.py
+++ b/store.py
@@ -15,14 +15,20 @@ class ReportStore:
         self.market = market
         self.verbose_print = verbose_print
 
+        self.print_logs = []
         self.logs = []
 
     def merge(self, other_report):
         self.logs += other_report.logs
         self.logs.sort(key=lambda x: x["date"])
 
+        self.print_logs += other_report.print_logs
+        self.print_logs.sort(key=lambda x: x[0])
+
     def print_log(self, message):
-        message = str(message)
+        now = datetime.now()
+        message = "{:%Y-%m-%d %H:%M:%S}: {}".format(now, str(message))
+        self.print_logs.append([now, message])
         if self.verbose_print:
             print(message)
 
@@ -30,12 +36,22 @@ class ReportStore:
         hash_["date"] = datetime.now()
         self.logs.append(hash_)
 
+    @staticmethod
+    def default_json_serial(obj):
+        if isinstance(obj, (datetime, date)):
+            return obj.isoformat()
+        return str(obj)
+
     def to_json(self):
-        def default_json_serial(obj):
-            if isinstance(obj, (datetime, date)):
-                return obj.isoformat()
-            return str(obj)
-        return json.dumps(self.logs, default=default_json_serial, indent="  ")
+        return json.dumps(self.logs, default=self.default_json_serial, indent="  ")
+
+    def to_json_array(self):
+        for log in (x.copy() for x in self.logs):
+            yield (
+                    log.pop("date"),
+                    log.pop("type"),
+                    json.dumps(log, default=self.default_json_serial, indent="  ")
+                    )
 
     def set_verbose(self, verbose_print):
         self.verbose_print = verbose_print
@@ -160,15 +176,28 @@ class ReportStore:
             })
 
     def log_http_request(self, method, url, body, headers, response):
-        self.add_log({
-            "type": "http_request",
-            "method": method,
-            "url": url,
-            "body": body,
-            "headers": headers,
-            "status": response.status_code,
-            "response": response.text
-            })
+        if isinstance(response, Exception):
+            self.add_log({
+                "type": "http_request",
+                "method": method,
+                "url": url,
+                "body": body,
+                "headers": headers,
+                "status": -1,
+                "response": None,
+                "error": response.__class__.__name__,
+                "error_message": str(response),
+                })
+        else:
+            self.add_log({
+                "type": "http_request",
+                "method": method,
+                "url": url,
+                "body": body,
+                "headers": headers,
+                "status": response.status_code,
+                "response": response.text
+                })
 
     def log_error(self, action, message=None, exception=None):
         self.print_log("[Error] {}".format(action))
@@ -193,6 +222,15 @@ class ReportStore:
             "action": action,
             })
 
+    def log_market(self, args, user_id, market_id):
+        self.add_log({
+            "type": "market",
+            "commit": "$Format:%H$",
+            "args": vars(args),
+            "user_id": user_id,
+            "market_id": market_id,
+            })
+
 class BalanceStore:
     def __init__(self, market):
         self.market = market