diff --git a/sist2-admin/frontend/src/components/JobListItem.vue b/sist2-admin/frontend/src/components/JobListItem.vue index d4e123b..3240f30 100644 --- a/sist2-admin/frontend/src/components/JobListItem.vue +++ b/sist2-admin/frontend/src/components/JobListItem.vue @@ -44,8 +44,7 @@ export default { return ""; } - const date = Date.parse(dateString); - return moment(date).fromNow(); + return moment.utc(dateString).local().fromNow(); } } } diff --git a/sist2-admin/frontend/src/views/Tasks.vue b/sist2-admin/frontend/src/views/Tasks.vue index d051a2e..7fe92e8 100644 --- a/sist2-admin/frontend/src/views/Tasks.vue +++ b/sist2-admin/frontend/src/views/Tasks.vue @@ -121,7 +121,7 @@ export default { id: row.id, name: row.name, duration: this.taskDuration(row), - time: moment(row.started).format("dd, MMM Do YYYY, HH:mm:ss"), + time: moment.utc(row.started).local().format("dd, MMM Do YYYY, HH:mm:ss"), logs: row.id, status: row.return_code === 0 ? "ok" : "failed" })); diff --git a/sist2-admin/sist2_admin/app.py b/sist2-admin/sist2_admin/app.py index 360be0b..a63d460 100644 --- a/sist2-admin/sist2_admin/app.py +++ b/sist2-admin/sist2_admin/app.py @@ -80,9 +80,8 @@ async def get_jobs(): @app.put("/api/job/{name:str}") async def update_job(name: str, new_job: Sist2Job): - # TODO: Check etag - new_job.last_modified = datetime.now() + new_job.last_modified = datetime.utcnow() job = db["jobs"][name] if not job: raise HTTPException(status_code=404) @@ -135,7 +134,7 @@ async def kill_job(task_id: str): def _run_job(job: Sist2Job): - job.last_modified = datetime.now() + job.last_modified = datetime.utcnow() if job.status == JobStatus("created"): job.status = JobStatus("started") db["jobs"][job.name] = job @@ -352,7 +351,7 @@ async def ws_tail_log(websocket: WebSocket, task_id: str, n: int): def main(): - uvicorn.run(app, port=WEBSERVER_PORT, host="0.0.0.0") + uvicorn.run(app, port=WEBSERVER_PORT, host="0.0.0.0", timeout_graceful_shutdown=0) def initialize_db(): diff --git a/sist2-admin/sist2_admin/jobs.py b/sist2-admin/sist2_admin/jobs.py index 639612e..09032b2 100644 --- a/sist2-admin/sist2_admin/jobs.py +++ b/sist2-admin/sist2_admin/jobs.py @@ -53,7 +53,7 @@ class Sist2Job(BaseModel): name=name, scan_options=ScanOptions(path="/"), index_options=IndexOptions(), - last_modified=datetime.now(), + last_modified=datetime.utcnow(), cron_expression="0 0 * * *" ) @@ -111,7 +111,7 @@ class Sist2Task: self._logger.info(json.dumps(log_json)) def run(self, sist2: Sist2, db: PersistentState): - self.started = datetime.now() + self.started = datetime.utcnow() logger.info(f"Started task {self.display_name}") @@ -132,14 +132,14 @@ class Sist2ScanTask(Sist2Task): self.pid = pid return_code = sist2.scan(self.job.scan_options, logs_cb=self.log_callback, set_pid_cb=set_pid) - self.ended = datetime.now() + self.ended = datetime.utcnow() if return_code != 0: self._logger.error(json.dumps({"sist2-admin": f"Process returned non-zero exit code ({return_code})"})) logger.info(f"Task {self.display_name} failed ({return_code})") else: self.job.index_path = self.job.scan_options.output - self.job.last_index_date = datetime.now() + self.job.last_index_date = datetime.utcnow() self.job.do_full_scan = False db["jobs"][self.job.name] = self.job self._logger.info(json.dumps({"sist2-admin": f"Save last_index_date={self.job.last_index_date}"})) @@ -172,7 +172,7 @@ class Sist2IndexTask(Sist2Task): self.job.index_options.path = self.job.scan_options.output return_code = sist2.index(self.job.index_options, logs_cb=self.log_callback) - self.ended = datetime.now() + self.ended = datetime.utcnow() duration = self.ended - self.started diff --git a/sist2-admin/sist2_admin/sist2.py b/sist2-admin/sist2_admin/sist2.py index 7d55936..f1aec38 100644 --- a/sist2-admin/sist2_admin/sist2.py +++ b/sist2-admin/sist2_admin/sist2.py @@ -238,7 +238,7 @@ class Sist2: if options.output is None: options.output = os.path.join( self._data_dir, - f"scan-{options.name.replace('/', '_')}-{datetime.now()}.sist2" + f"scan-{options.name.replace('/', '_')}-{datetime.utcnow()}.sist2" ) args = [