Skip to content

Instantly share code, notes, and snippets.

@kbarber
Created January 28, 2014 21:43
Show Gist options
  • Save kbarber/8677137 to your computer and use it in GitHub Desktop.
Save kbarber/8677137 to your computer and use it in GitHub Desktop.
(ns giordano.pdb
(:require [clj-http.client :as client]))
(defn cm [host port]
{:host host
:port port
:cm (clj-http.conn-mgr/make-reusable-conn-manager {:timeout 2 :threads 4})})
(defn query [cm url]
(let [host (:host cm)
port (:port cm)
cm (:cm cm)]
(:body (client/get (str "http://" host ":" port url)
{:connection-manager cm
:accept :json
:as :json-string-keys}))))
(defn metric [cm metric]
(let [encoded (clj-http.util/url-encode metric)]
(query cm (str "/v3/metrics/mbean/" encoded))))
(defn mbeans-all [cm]
"Retrieve top level mbeans"
(query cm "/v3/metrics/mbeans"))
(defn metrics-all
([cm]
"Retreive all metrics without a filter"
(metrics-all cm nil))
([cm filt]
"Retreive all metrics with a filter"
(let [mbeans (query cm "/v3/metrics/mbeans")]
(for [[k v] (seq mbeans)
:let [data (metric cm k)]
:when (or (nil? filt) (nil? (re-find filt k)))]
[k data]))))
(defn metrics-all-table
([cm]
"Retreive all metrics without a filter"
(metrics-all-table cm nil))
([cm filt]
"Retreive all metrics with a filter"
(let [result (atom [])
mbeans (mbeans-all cm)]
(doseq [[object _] (seq mbeans)
:let [data (metric cm object)]
:when (or (nil? filt) (nil? (re-find filt object)))]
(doseq [[property value] (seq data)]
(swap! result #(conj %1 [object property value]))))
@result)))
(defn nodes-all-table [cm]
"Retreive all nodes"
(let [raw (query cm "/v3/nodes")]
(vec (for [node raw
:let [name (get node "name")
deac (get node "deactivated")
cat (get node "catalog_timestamp")
fact (get node "facts_timestamp")
rep (get node "report_timestamp")]]
[name deac cat fact rep]))))
(defn facts-all-table [cm]
"Retreive all facts"
(let [raw (query cm "/v3/facts")]
(vec (for [node raw
:let [certname (get node "certname")
name (get node "name")
value (get node "value")]]
[certname name value]))))
(defn resources-all-table [cm]
"Retreive all resources"
(let [raw (query cm "/v3/resources")]
(vec (for [node raw
:let [certname (get node "certname")
type (get node "type")
title (get node "title")
tags (get node "tags")
parameters (get node "parameters")
exported (get node "exported")
file (get node "file")
line (get node "line")]]
[certname type title tags parameters exported file line]))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment