65 lines
1.9 KiB
Org Mode
65 lines
1.9 KiB
Org Mode
#+TITLE: SKILL: Log Aggregator (Universal Literate Note)
|
|
#+ID: skill-log-aggregator
|
|
#+STARTUP: content
|
|
#+FILETAGS: :logging:observability:system:psf:
|
|
|
|
* Overview
|
|
The *Log Aggregator* monitors and summarizes system logs to provide insights into agent behavior and system health.
|
|
|
|
* Phase A: Demand (PRD)
|
|
:PROPERTIES:
|
|
:STATUS: FROZEN
|
|
:END:
|
|
|
|
** 1. Purpose
|
|
Collect and summarize agent logs.
|
|
|
|
** 2. User Needs
|
|
- *Scan:* Retrieve logs from the system.
|
|
- *Summarize:* Provide a high-level summary of recent activities.
|
|
|
|
* Phase B: Blueprint (PROTOCOL)
|
|
:PROPERTIES:
|
|
:STATUS: SIGNED
|
|
:END:
|
|
|
|
** 1. Architectural Intent
|
|
Observability and log analysis system.
|
|
|
|
** 2. Semantic Interfaces
|
|
#+begin_src lisp
|
|
(defun log-scan (&optional (lines 100)) "Scan the last N lines of the log.")
|
|
(defun log-summarize (logs) "Neural or symbolic summary of LOGS.")
|
|
#+end_src
|
|
|
|
* Phase D: Build (Implementation)
|
|
|
|
#+begin_src lisp :tangle ../projects/org-skill-log-aggregator/src/log-aggregator.lisp
|
|
(defun log-scan (&optional (lines 100))
|
|
"Reads the last LINES lines of the system log file."
|
|
(let ((log-file (merge-pathnames "logs/agent.log" (uiop:getenv "SYSTEM_DIR"))))
|
|
(if (uiop:file-exists-p log-file)
|
|
(uiop:run-program `("tail" "-n" ,(write-to-string lines) ,(namestring log-file)) :output :string)
|
|
"Log file not found.")))
|
|
|
|
(defun log-summarize (logs)
|
|
"Symbolic summary of LOGS focusing on errors and warnings."
|
|
(let ((lines (uiop:split-string logs :separator '(#\Newline)))
|
|
(errors 0)
|
|
(warnings 0))
|
|
(dolist (line lines)
|
|
(cond
|
|
((cl-ppcre:scan "ERROR" line) (incf errors))
|
|
((cl-ppcre:scan "WARN" line) (incf warnings))))
|
|
(format nil "Log Summary: ~a errors, ~a warnings found in scan." errors warnings)))
|
|
#+end_src
|
|
|
|
* Registration
|
|
#+begin_src lisp
|
|
(defskill :skill-log-aggregator
|
|
:priority 30
|
|
:trigger (lambda (context) nil)
|
|
:neuro (lambda (context) nil)
|
|
:symbolic (lambda (action context) action))
|
|
#+end_src
|