   (will-mount [_]
               (go (while true
                     (let [agg-key (-> opts :agg-key keyword)
-                          agg-resp (<! (es-agg (or (:url opts) (es-url :agg))
+                          agg-resp (<! (es-agg (or (:url opts) (-> app :es-api :agg))
                                                (merge (:body opts)
                                                        {:query
                                                         {:filtered

  (render [_]
          (html
           [:pre {:style {:font-size "8pt"}}
            [:code.json (.stringify js/JSON (clj->js opts) nil 4)]]
           ))
  )

(defcomponent agg-table [app owner opts]
  (render [this] (html [:.card.blue-grey.darken-1

;;                       (.log js/console (pr-str agg-key))
;;                       (.log js/console (pr-str agg-resp))
                      (om/update! app [:agg agg-key] agg-resp))
                    (<! (timeout (or (-> app :poll-interval) poll-interval))))))
  (render [_] (html [:.hide "Aggregator:" (-> opts :agg-key)])))

;;;;;;;;;;;;;;;;;;
;; meta components

(defcomponent aggregators [app owner opts]
  (render [_] (html [:div (for [agg (:aggregators app)]
                            (om/build aggregator app {:opts agg}))])))

(defn- get-component
  [widget-type]
