mirror of
https://github.com/simon987/sist2.git
synced 2025-04-21 19:26:45 +00:00
Compare commits
4 Commits
ca2e308d89
...
ca845d80e8
Author | SHA1 | Date | |
---|---|---|---|
ca845d80e8 | |||
e2025df2c0 | |||
7eb064162e | |||
7bc4b73e43 |
@ -134,7 +134,7 @@ export default {
|
|||||||
duration: this.taskDuration(row),
|
duration: this.taskDuration(row),
|
||||||
time: moment.utc(row.started).local().format("dd, MMM Do YYYY, HH:mm:ss"),
|
time: moment.utc(row.started).local().format("dd, MMM Do YYYY, HH:mm:ss"),
|
||||||
logs: null,
|
logs: null,
|
||||||
status: row.return_code === 0 ? "ok" : "failed",
|
status: [0,1].includes(row.return_code) ? "ok" : "failed",
|
||||||
_row: row
|
_row: row
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
@ -275,7 +275,10 @@ def check_es_version(es_url: str, insecure: bool):
|
|||||||
|
|
||||||
|
|
||||||
def start_frontend_(frontend: Sist2Frontend):
|
def start_frontend_(frontend: Sist2Frontend):
|
||||||
frontend.web_options.indices = list(map(lambda j: db["jobs"][j].index_path, frontend.jobs))
|
frontend.web_options.indices = [
|
||||||
|
os.path.join(DATA_FOLDER, db["jobs"][j].index_path)
|
||||||
|
for j in frontend.jobs
|
||||||
|
]
|
||||||
|
|
||||||
backend_name = frontend.web_options.search_backend
|
backend_name = frontend.web_options.search_backend
|
||||||
search_backend = db["search_backends"][backend_name]
|
search_backend = db["search_backends"][backend_name]
|
||||||
@ -354,7 +357,7 @@ def delete_search_backend(name: str):
|
|||||||
del db["search_backends"][name]
|
del db["search_backends"][name]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
os.remove(backend.search_index)
|
os.remove(os.path.join(DATA_FOLDER, backend.search_index))
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -10,7 +10,9 @@ from jobs import Sist2Job
|
|||||||
|
|
||||||
|
|
||||||
def _check_schedule(db: PersistentState, run_job):
|
def _check_schedule(db: PersistentState, run_job):
|
||||||
for job in db["jobs"]:
|
jobs = list(db["jobs"])
|
||||||
|
|
||||||
|
for job in jobs:
|
||||||
job: Sist2Job
|
job: Sist2Job
|
||||||
|
|
||||||
if job.schedule_enabled:
|
if job.schedule_enabled:
|
||||||
|
@ -13,7 +13,7 @@ from uuid import uuid4, UUID
|
|||||||
from hexlib.db import PersistentState
|
from hexlib.db import PersistentState
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from config import logger, LOG_FOLDER
|
from config import logger, LOG_FOLDER, DATA_FOLDER
|
||||||
from notifications import Notifications
|
from notifications import Notifications
|
||||||
from sist2 import ScanOptions, IndexOptions, Sist2
|
from sist2 import ScanOptions, IndexOptions, Sist2
|
||||||
from state import RUNNING_FRONTENDS, get_log_files_to_remove, delete_log_file
|
from state import RUNNING_FRONTENDS, get_log_files_to_remove, delete_log_file
|
||||||
@ -131,7 +131,9 @@ class Sist2ScanTask(Sist2Task):
|
|||||||
return_code = sist2.scan(self.job.scan_options, logs_cb=self.log_callback, set_pid_cb=set_pid)
|
return_code = sist2.scan(self.job.scan_options, logs_cb=self.log_callback, set_pid_cb=set_pid)
|
||||||
self.ended = datetime.utcnow()
|
self.ended = datetime.utcnow()
|
||||||
|
|
||||||
if return_code != 0:
|
is_ok = return_code in (0, 1)
|
||||||
|
|
||||||
|
if not is_ok:
|
||||||
self._logger.error(json.dumps({"sist2-admin": f"Process returned non-zero exit code ({return_code})"}))
|
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})")
|
logger.info(f"Task {self.display_name} failed ({return_code})")
|
||||||
else:
|
else:
|
||||||
@ -144,7 +146,7 @@ class Sist2ScanTask(Sist2Task):
|
|||||||
logger.info(f"Completed {self.display_name} ({return_code=})")
|
logger.info(f"Completed {self.display_name} ({return_code=})")
|
||||||
|
|
||||||
# Remove old index
|
# Remove old index
|
||||||
if return_code == 0:
|
if is_ok:
|
||||||
if self.job.previous_index_path is not None and self.job.previous_index_path != self.job.index_path:
|
if self.job.previous_index_path is not None and self.job.previous_index_path != self.job.index_path:
|
||||||
self._logger.info(json.dumps({"sist2-admin": f"Remove {self.job.previous_index_path=}"}))
|
self._logger.info(json.dumps({"sist2-admin": f"Remove {self.job.previous_index_path=}"}))
|
||||||
try:
|
try:
|
||||||
@ -218,7 +220,10 @@ class Sist2IndexTask(Sist2Task):
|
|||||||
|
|
||||||
logger.debug(f"Fetched search backend options for {backend_name}")
|
logger.debug(f"Fetched search backend options for {backend_name}")
|
||||||
|
|
||||||
frontend.web_options.indices = map(lambda j: db["jobs"][j].index_path, frontend.jobs)
|
frontend.web_options.indices = [
|
||||||
|
os.path.join(DATA_FOLDER, db["jobs"][j].index_path)
|
||||||
|
for j in frontend.jobs
|
||||||
|
]
|
||||||
|
|
||||||
pid = sist2.web(frontend.web_options, search_backend, frontend.name)
|
pid = sist2.web(frontend.web_options, search_backend, frontend.name)
|
||||||
RUNNING_FRONTENDS[frontend_name] = pid
|
RUNNING_FRONTENDS[frontend_name] = pid
|
||||||
@ -244,7 +249,7 @@ class TaskQueue:
|
|||||||
def _tasks_failed(self):
|
def _tasks_failed(self):
|
||||||
done = set()
|
done = set()
|
||||||
|
|
||||||
for row in self._db["task_done"].sql("WHERE return_code != 0"):
|
for row in self._db["task_done"].sql("WHERE return_code NOT IN (0,1)"):
|
||||||
done.add(uuid.UUID(row["id"]))
|
done.add(uuid.UUID(row["id"]))
|
||||||
|
|
||||||
return done
|
return done
|
||||||
|
@ -49,7 +49,7 @@ class Sist2SearchBackend(BaseModel):
|
|||||||
def create_default(name: str, backend_type: SearchBackendType = SearchBackendType("elasticsearch")):
|
def create_default(name: str, backend_type: SearchBackendType = SearchBackendType("elasticsearch")):
|
||||||
return Sist2SearchBackend(
|
return Sist2SearchBackend(
|
||||||
name=name,
|
name=name,
|
||||||
search_index=os.path.join(DATA_FOLDER, f"search-index-{name.replace('/', '_')}.sist2"),
|
search_index=f"search-index-{name.replace('/', '_')}.sist2",
|
||||||
backend_type=backend_type
|
backend_type=backend_type
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -63,10 +63,13 @@ class IndexOptions(BaseModel):
|
|||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
def args(self, search_backend):
|
def args(self, search_backend):
|
||||||
|
absolute_path = os.path.join(DATA_FOLDER, self.path)
|
||||||
|
|
||||||
if search_backend.backend_type == SearchBackendType("sqlite"):
|
if search_backend.backend_type == SearchBackendType("sqlite"):
|
||||||
args = ["sqlite-index", self.path, "--search-index", search_backend.search_index]
|
search_index_absolute = os.path.join(DATA_FOLDER, search_backend.search_index)
|
||||||
|
args = ["sqlite-index", absolute_path, "--search-index", search_index_absolute]
|
||||||
else:
|
else:
|
||||||
args = ["index", self.path, f"--threads={search_backend.threads}",
|
args = ["index", absolute_path, f"--threads={search_backend.threads}",
|
||||||
f"--es-url={search_backend.es_url}",
|
f"--es-url={search_backend.es_url}",
|
||||||
f"--es-index={search_backend.es_index}",
|
f"--es-index={search_backend.es_index}",
|
||||||
f"--batch-size={search_backend.batch_size}"]
|
f"--batch-size={search_backend.batch_size}"]
|
||||||
@ -118,9 +121,12 @@ class ScanOptions(BaseModel):
|
|||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
def args(self):
|
def args(self):
|
||||||
|
|
||||||
|
output_path = os.path.join(DATA_FOLDER, self.output)
|
||||||
|
|
||||||
args = ["scan", self.path, f"--threads={self.threads}", f"--thumbnail-quality={self.thumbnail_quality}",
|
args = ["scan", self.path, f"--threads={self.threads}", f"--thumbnail-quality={self.thumbnail_quality}",
|
||||||
f"--thumbnail-count={self.thumbnail_count}", f"--thumbnail-size={self.thumbnail_size}",
|
f"--thumbnail-count={self.thumbnail_count}", f"--thumbnail-size={self.thumbnail_size}",
|
||||||
f"--content-size={self.content_size}", f"--output={self.output}", f"--depth={self.depth}",
|
f"--content-size={self.content_size}", f"--output={output_path}", f"--depth={self.depth}",
|
||||||
f"--archive={self.archive}", f"--mem-buffer={self.mem_buffer}"]
|
f"--archive={self.archive}", f"--mem-buffer={self.mem_buffer}"]
|
||||||
|
|
||||||
if self.incremental:
|
if self.incremental:
|
||||||
@ -235,7 +241,7 @@ class WebOptions(BaseModel):
|
|||||||
class Sist2:
|
class Sist2:
|
||||||
|
|
||||||
def __init__(self, bin_path: str, data_directory: str):
|
def __init__(self, bin_path: str, data_directory: str):
|
||||||
self._bin_path = bin_path
|
self.bin_path = bin_path
|
||||||
self._data_dir = data_directory
|
self._data_dir = data_directory
|
||||||
|
|
||||||
def index(self, options: IndexOptions, search_backend: Sist2SearchBackend, logs_cb):
|
def index(self, options: IndexOptions, search_backend: Sist2SearchBackend, logs_cb):
|
||||||
@ -248,7 +254,7 @@ class Sist2:
|
|||||||
search_backend.script_file = None
|
search_backend.script_file = None
|
||||||
|
|
||||||
args = [
|
args = [
|
||||||
self._bin_path,
|
self.bin_path,
|
||||||
*options.args(search_backend),
|
*options.args(search_backend),
|
||||||
"--json-logs",
|
"--json-logs",
|
||||||
"--very-verbose"
|
"--very-verbose"
|
||||||
@ -269,13 +275,10 @@ class Sist2:
|
|||||||
def scan(self, options: ScanOptions, logs_cb, set_pid_cb):
|
def scan(self, options: ScanOptions, logs_cb, set_pid_cb):
|
||||||
|
|
||||||
if options.output is None:
|
if options.output is None:
|
||||||
options.output = os.path.join(
|
options.output = f"scan-{options.name.replace('/', '_')}-{datetime.utcnow()}.sist2"
|
||||||
self._data_dir,
|
|
||||||
f"scan-{options.name.replace('/', '_')}-{datetime.utcnow()}.sist2"
|
|
||||||
)
|
|
||||||
|
|
||||||
args = [
|
args = [
|
||||||
self._bin_path,
|
self.bin_path,
|
||||||
*options.args(),
|
*options.args(),
|
||||||
"--json-logs",
|
"--json-logs",
|
||||||
"--very-verbose"
|
"--very-verbose"
|
||||||
@ -333,7 +336,7 @@ class Sist2:
|
|||||||
options.auth0_public_key_file = None
|
options.auth0_public_key_file = None
|
||||||
|
|
||||||
args = [
|
args = [
|
||||||
self._bin_path,
|
self.bin_path,
|
||||||
*options.args(search_backend)
|
*options.args(search_backend)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -51,11 +51,11 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "git_hash.h"
|
#include "git_hash.h"
|
||||||
|
|
||||||
#define VERSION "3.1.1"
|
#define VERSION "3.1.2"
|
||||||
static const char *const Version = VERSION;
|
static const char *const Version = VERSION;
|
||||||
static const int VersionMajor = 3;
|
static const int VersionMajor = 3;
|
||||||
static const int VersionMinor = 1;
|
static const int VersionMinor = 1;
|
||||||
static const int VersionPatch = 1;
|
static const int VersionPatch = 2;
|
||||||
|
|
||||||
#ifndef SIST_PLATFORM
|
#ifndef SIST_PLATFORM
|
||||||
#define SIST_PLATFORM unknown
|
#define SIST_PLATFORM unknown
|
||||||
|
Loading…
x
Reference in New Issue
Block a user