mirror of
https://github.com/FunnyWolf/agentic-soc-platform.git
synced 2026-08-22 13:12:56 +02:00
60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
from django.utils import timezone
|
|
|
|
from apps.agentic.analysis.analysis import run_case_analysis
|
|
from apps.agentic.models import AgenticJobStatus, CaseAnalysisJob
|
|
from apps.agentic.services.cases import (
|
|
complete_case_analysis_job,
|
|
fail_case_analysis_job,
|
|
start_case_analysis_job,
|
|
)
|
|
from apps.agentic.services.playbooks import (
|
|
claim_pending_playbook_run,
|
|
find_playbook_class,
|
|
mark_playbook_failed,
|
|
mark_playbook_success,
|
|
)
|
|
|
|
|
|
def run_playbook_once(*, scripts_dir=None):
|
|
playbook_run = claim_pending_playbook_run()
|
|
if playbook_run is None:
|
|
return False
|
|
|
|
try:
|
|
playbook_class = find_playbook_class(playbook_run.name, scripts_dir=scripts_dir)
|
|
result = playbook_class(playbook_run=playbook_run).run()
|
|
mark_playbook_success(playbook_run, str(result))
|
|
except Exception as exc:
|
|
mark_playbook_failed(playbook_run, exc)
|
|
return True
|
|
|
|
return True
|
|
|
|
|
|
def run_case_analysis_once():
|
|
job = (
|
|
CaseAnalysisJob.objects.filter(
|
|
status=AgenticJobStatus.PENDING,
|
|
scheduled_at__lte=timezone.now(),
|
|
)
|
|
.order_by("scheduled_at", "created_at")
|
|
.first()
|
|
)
|
|
if job is None:
|
|
return False
|
|
|
|
running_job = start_case_analysis_job(job)
|
|
try:
|
|
result = run_case_analysis(
|
|
case=running_job.case,
|
|
trigger=running_job.trigger,
|
|
source=running_job,
|
|
)
|
|
complete_case_analysis_job(
|
|
running_job,
|
|
result_json=result.analysis_record,
|
|
)
|
|
except Exception as exc:
|
|
fail_case_analysis_job(running_job, str(exc))
|
|
return True
|