aboutsummaryrefslogtreecommitdiffstats
path: root/desmoctl.scm
diff options
context:
space:
mode:
Diffstat (limited to 'desmoctl.scm')
-rw-r--r--desmoctl.scm65
1 files changed, 63 insertions, 2 deletions
diff --git a/desmoctl.scm b/desmoctl.scm
index b9302da..074dfaa 100644
--- a/desmoctl.scm
+++ b/desmoctl.scm
@@ -6,6 +6,7 @@
(chicken condition)
(chicken port)
(chicken io)
+ srfi-13
medea
matchable
test
@@ -137,6 +138,10 @@
(test "returns parse-ok for -f foo.txt" '(parse-ok subcmd-apply ((apply-config-path "foo.txt")))
(parse-subcommand-apply '("-f" "foo.txt")))))
+;;;;;;;;;;;;;;;;;
+;; API adapter ;;
+;;;;;;;;;;;;;;;;;
+
(define (mock-post-fn . rest)
(print (format "mock-post-fn called with: ~A" rest))
rest)
@@ -148,12 +153,29 @@
headers: (headers `((x-api-key ,api-key))))
json read-string))
+(define (mock-get-fn . rest)
+ (print (format "mock-get-fn called with: ~A" rest))
+ rest)
+
+(define (get-fn url api-key)
+ (with-input-from-request
+ (make-request method: 'GET
+ uri: (uri-reference url)
+ headers: (headers `((x-api-key ,api-key))))
+ #f read-string))
+
(define (post-prison post-fn cfg prison-json)
(let* ((api-url (cadr (assoc 'mgmt-api-url cfg)))
(api-key (cadr (assoc 'mgmt-api-key cfg)))
(req-url (string-append api-url "/prisons")))
(post-fn req-url api-key prison-json)))
+(define (get-prisons get-fn cfg)
+ (let* ((api-url (cadr (assoc 'mgmt-api-url cfg)))
+ (api-key (cadr (assoc 'mgmt-api-key cfg)))
+ (req-url (string-append api-url "/prisons")))
+ (get-fn req-url api-key)))
+
(define (run-apply cfg)
(define apply-config-content
(let* ((path (cadr (assoc 'apply-config-path cfg)))
@@ -190,6 +212,46 @@
(print "Apply complete"))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Parse and eval "status" subcommand ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(define (alist-keys alist)
+ (map (lambda (elem) (symbol->string (car elem))) alist))
+
+(define (string-repeat s n)
+ (if (<= n 0)
+ ""
+ (string-append s (repeat-string s (- n 1)))))
+
+(define (pretty-print-alists alists)
+ (define (pp alist)
+ (define (pp-pair pair)
+ (print (format "~A: ~A" (symbol->string (car pair)) (cdr pair))))
+
+ (print "")
+ (for-each pp-pair alist))
+
+ (if (null? alists)
+ "No data"
+ (for-each pp alists))
+ )
+
+(define (run-status cfg)
+ (print "Fetching status of all prisons...")
+
+ (define api-response
+ (get-prisons get-fn cfg))
+
+ (define prisons (vector->list (from-json-string api-response)))
+
+ (define (debug-print-prison prison)
+ ;; TODO improve this
+ (debug-print (format "~a" prison)))
+
+ (for-each debug-print-prison prisons)
+ (pretty-print-alists prisons))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Parse flags and subcommand ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -268,8 +330,7 @@
(define (eval-subcommand subcmd cfg)
(match subcmd
['subcmd-apply (run-apply cfg)]
- ['subcmd-status (print "TODO status")
- (exit 1)]
+ ['subcmd-status (run-status cfg)]
['subcmd-logs (print "TODO logs")
(exit 1)]
['subcmd-help