mirror of
https://github.com/simon987/task_tracker_drone.git
synced 2025-04-19 10:16:42 +00:00
Changes for task_tracker@26dee89
This commit is contained in:
parent
ef07c059ad
commit
3aa187c2c4
@ -1,10 +1,8 @@
|
|||||||
import base64
|
import base64
|
||||||
import hashlib
|
|
||||||
import hmac
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
from email.utils import formatdate
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
API_TIMEOUT = 5
|
API_TIMEOUT = 5
|
||||||
@ -71,7 +69,7 @@ class Worker:
|
|||||||
self.id: int = wid
|
self.id: int = wid
|
||||||
self.alias: str = alias
|
self.alias: str = alias
|
||||||
self.secret: bytes = base64.b64decode(secret)
|
self.secret: bytes = base64.b64decode(secret)
|
||||||
self._secret_b64 = secret
|
self.secret_b64 = secret
|
||||||
self._api: TaskTrackerApi = api
|
self._api: TaskTrackerApi = api
|
||||||
|
|
||||||
def fetch_task(self, project_id):
|
def fetch_task(self, project_id):
|
||||||
@ -99,7 +97,7 @@ class Worker:
|
|||||||
json.dump({
|
json.dump({
|
||||||
"id": self.id,
|
"id": self.id,
|
||||||
"alias": self.alias,
|
"alias": self.alias,
|
||||||
"secret": self._secret_b64
|
"secret": self.secret_b64
|
||||||
}, out)
|
}, out)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -112,7 +110,7 @@ class Worker:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def format_headers(ts: str = None, ua: str = None, wid: int = None, signature: str = None):
|
def format_headers(ua: str = None, wid: int = None, secret: str = None):
|
||||||
headers = dict()
|
headers = dict()
|
||||||
|
|
||||||
if ua is None:
|
if ua is None:
|
||||||
@ -121,8 +119,7 @@ def format_headers(ts: str = None, ua: str = None, wid: int = None, signature: s
|
|||||||
headers["User-Agent"] = ua
|
headers["User-Agent"] = ua
|
||||||
|
|
||||||
headers["X-Worker-Id"] = str(wid)
|
headers["X-Worker-Id"] = str(wid)
|
||||||
headers["X-Signature"] = str(signature)
|
headers["X-Secret"] = str(secret)
|
||||||
headers["Timestamp"] = str(ts)
|
|
||||||
|
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
@ -146,7 +143,7 @@ class TaskTrackerApi:
|
|||||||
return worker
|
return worker
|
||||||
|
|
||||||
def fetch_task(self, worker: Worker, project_id: int) -> Task:
|
def fetch_task(self, worker: Worker, project_id: int) -> Task:
|
||||||
response = self._http_get("/task/get/%d" % (project_id, ), worker)
|
response = self._http_get("/task/get/%d" % (project_id,), worker)
|
||||||
|
|
||||||
if response:
|
if response:
|
||||||
json_response = json.loads(response.text)
|
json_response = json.loads(response.text)
|
||||||
@ -170,13 +167,17 @@ class TaskTrackerApi:
|
|||||||
|
|
||||||
def log(self, worker: Worker, level: int, message: str, timestamp: int, scope: str):
|
def log(self, worker: Worker, level: int, message: str, timestamp: int, scope: str):
|
||||||
if level == LOG_TRACE:
|
if level == LOG_TRACE:
|
||||||
return self._http_post("/log/trace", {"level": level, "message": message, "timestamp": timestamp, "scope": scope}, worker)
|
return self._http_post("/log/trace",
|
||||||
|
{"level": level, "message": message, "timestamp": timestamp, "scope": scope}, worker)
|
||||||
if level == LOG_INFO:
|
if level == LOG_INFO:
|
||||||
return self._http_post("/log/info", {"level": level, "message": message, "timestamp": timestamp, "scope": scope}, worker)
|
return self._http_post("/log/info",
|
||||||
|
{"level": level, "message": message, "timestamp": timestamp, "scope": scope}, worker)
|
||||||
if level == LOG_WARN:
|
if level == LOG_WARN:
|
||||||
return self._http_post("/log/warn", {"level": level, "message": message, "timestamp": timestamp, "scope": scope}, worker)
|
return self._http_post("/log/warn",
|
||||||
|
{"level": level, "message": message, "timestamp": timestamp, "scope": scope}, worker)
|
||||||
if level == LOG_ERROR:
|
if level == LOG_ERROR:
|
||||||
return self._http_post("/log/error", {"level": level, "message": message, "timestamp": timestamp, "scope": scope}, worker)
|
return self._http_post("/log/error",
|
||||||
|
{"level": level, "message": message, "timestamp": timestamp, "scope": scope}, worker)
|
||||||
|
|
||||||
print("Invalid log level")
|
print("Invalid log level")
|
||||||
|
|
||||||
@ -187,7 +188,7 @@ class TaskTrackerApi:
|
|||||||
"verification": verification
|
"verification": verification
|
||||||
}, worker)
|
}, worker)
|
||||||
|
|
||||||
def request_access(self, worker: Worker, project: int, assign:bool, submit:bool):
|
def request_access(self, worker: Worker, project: int, assign: bool, submit: bool):
|
||||||
return self._http_post("/project/request_access", {
|
return self._http_post("/project/request_access", {
|
||||||
"project": project,
|
"project": project,
|
||||||
"assign": assign,
|
"assign": assign,
|
||||||
@ -201,9 +202,7 @@ class TaskTrackerApi:
|
|||||||
|
|
||||||
def _http_get(self, endpoint: str, worker: Worker = None):
|
def _http_get(self, endpoint: str, worker: Worker = None):
|
||||||
if worker is not None:
|
if worker is not None:
|
||||||
ts = formatdate(timeval=None, localtime=False, usegmt=True)
|
headers = format_headers(secret=worker.secret_b64, wid=worker.id)
|
||||||
signature = hmac.new(key=worker.secret, msg=(endpoint + ts).encode("utf8"), digestmod=hashlib.sha256).hexdigest()
|
|
||||||
headers = format_headers(signature=signature, wid=worker.id, ts=ts)
|
|
||||||
else:
|
else:
|
||||||
headers = format_headers()
|
headers = format_headers()
|
||||||
retries = 0
|
retries = 0
|
||||||
@ -220,7 +219,7 @@ class TaskTrackerApi:
|
|||||||
return response
|
return response
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
retries += 1
|
retries += 1
|
||||||
print("ERROR: %s" % (e, ))
|
print("ERROR: %s" % (e,))
|
||||||
pass
|
pass
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -229,9 +228,7 @@ class TaskTrackerApi:
|
|||||||
body = json.dumps(body)
|
body = json.dumps(body)
|
||||||
|
|
||||||
if worker is not None:
|
if worker is not None:
|
||||||
ts = formatdate(timeval=None, localtime=False, usegmt=True)
|
headers = format_headers(secret=worker.secret_b64, wid=worker.id)
|
||||||
signature = hmac.new(key=worker.secret, msg=(body + ts).encode("utf8"), digestmod=hashlib.sha256).hexdigest()
|
|
||||||
headers = format_headers(signature=signature, wid=worker.id, ts=ts)
|
|
||||||
else:
|
else:
|
||||||
headers = format_headers()
|
headers = format_headers()
|
||||||
retries = 0
|
retries = 0
|
||||||
@ -251,4 +248,3 @@ class TaskTrackerApi:
|
|||||||
retries += 1
|
retries += 1
|
||||||
pass
|
pass
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user