@@ -11,10 +11,12 @@ (require-extension (srfi 18) extras tcp s11n) (use sqlite3 srfi-1 posix srfi-69 hostinfo) (import (prefix sqlite3 sqlite3:)) +(declare (unit portlogger)) + ;; lsof -i (define (portlogger:open-db fname) (let* ((exists (file-exists? fname)) @@ -29,10 +31,19 @@ "CREATE TABLE ports ( port INTEGER PRIMARY KEY, state TEXT DEFAULT 'not-used', fail_count INTEGER DEFAULT 0);")) db)) + +(define (portlogger:open-run-close proc . params) + (handle-exceptions + exn + (print "ERROR: portlogger:open-run-close failed. " proc " " params) + (let* ((db (portlogger:open-db (conc "/tmp/." (current-user-name) "-portlogger.db"))) + (res (apply proc db params))) + (sqlite3:finalize! db) + res))) ;; (fold-row PROC INIT DATABASE SQL . PARAMETERS) (define (portlogger:take-port db portnum) (let* ((qry1 (sqlite3:prepare db "INSERT INTO ports (port,state) VALUES (?,?);")) (qry2 (sqlite3:prepare db "UPDATE ports SET state=? WHERE port=?;")) @@ -78,11 +89,11 @@ ;;====================================================================== (define (portlogger:main . args) - (let* ((db (portlogger:open-db (conc "/tmp/." (current-user-name)))) + (let* ((db (portlogger:open-db (conc "/tmp/." (current-user-name) "-portlogger.db"))) (numargs (length args)) (result (cond ((> numargs 1) ;; most commands (case (string->symbol (car args)) ;; commands with two or more params ((take)(portlogger:take-port db (string->number (cadr args)))) @@ -92,6 +103,6 @@ (caddr args)) ((failed)(portlogger:set-failed db (string->number (cadr args))) 'failed)))))) (sqlite3:finalize! db) result)) -(print (apply portlogger:main (cdr (argv)))) +;; (print (apply portlogger:main (cdr (argv))))