git.fiddlerwoaroof.com
Raw Blame History
(in-package :fwoar.lw-curator)

(defun o->s (jo)
  (map 'string 'code-char
       (lw-ji:primitive-array-to-lisp-array jo)))

(defun al->lisp (al)
  (lw-ji:map-java-object-array 'identity
                               (fwoar.lw-curator.ji.al:.toarray al)
                               :collect t))

(defun client (host)
  (fwoar.lw-curator.ji.cff:.newclient host
                                      (fwoar.lw-curator.ji.bebr:.new 100 5000 10)))

(defun call-with-client (client lambda)
  (fwoar.lw-curator.ji.framework:.start client)
  (unwind-protect (funcall lambda client)
    (fwoar.lw-curator.ji.framework:.close client)))

(defmacro with-client ((sym host) &body body)
  `(let ((,sym (client ,host)))
     (call-with-client ,sym
                       (lambda (,sym)
                         ,@body))))

(defun get-consumers (client)
  (al->lisp
   (fwoar.lw-curator.ji.gcb:.forpath
    (fwoar.lw-curator.ji.framework:.getchildren client)
    "/consumers")))

(defun get-consumer-topics (client consumer)
  (al->lisp
   (fwoar.lw-curator.ji.gcb:.forpath
    (fwoar.lw-curator.ji.framework:.getchildren client)
    (format nil "/consumers/~a/offsets" consumer))))

(defun get-consumer-partitions (client consumer topic)
  (al->lisp
   (fwoar.lw-curator.ji.gcb:.forpath
    (fwoar.lw-curator.ji.framework:.getchildren client)
    (format nil "/consumers/~a/offsets/~a" consumer topic))))

(defun get-consumer-owner (client consumer topic partition)
  (o->s
   (fwoar.lw-curator.ji.gdb:.forpath
    (fwoar.lw-curator.ji.framework:.getdata client)
    (format nil "/consumers/~a/owners/~a/~a" consumer topic partition))))

(defun get-consumer-offset (client consumer topic partition)
  (nth-value 0
             (parse-integer
              (o->s
               (fwoar.lw-curator.ji.gdb:.forpath
                (fwoar.lw-curator.ji.framework:.getdata client)
                (format nil "/consumers/~a/offsets/~a/~a" consumer topic partition))))))