From 3740e7943f7d5102fca53588114fbdeed87d3e0f Mon Sep 17 00:00:00 2001 From: Dave Pedu Date: Sat, 5 Dec 2015 01:21:40 -0800 Subject: [PATCH] add support for ES mappings per module --- pymonitor/daemon.py | 43 ++++++++++++++++++++++++++++++------ pymonitor/monitors/uptime.py | 10 +++++++++ 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/pymonitor/daemon.py b/pymonitor/daemon.py index 1a46724..af22a79 100755 --- a/pymonitor/daemon.py +++ b/pymonitor/daemon.py @@ -28,11 +28,17 @@ class MonitorDaemon(Thread): logger.info("path %s" % checkerPath) # Create/start all monitoring threads - logger.info("starting monitor threads") + logger.info("creating monitor threads") for instance in self.config["monitors"]: monitor_thread = MonitorThread(instance, self.backend) - monitor_thread.start() self.threads.append(monitor_thread) + self.backend.mapping.update(monitor_thread.mapping) + + self.backend.connect() + + logger.info("starting monitor threads") + for monitor_thread in self.threads: + monitor_thread.start() # Tear down all threads logger.info("joining monitor threads") @@ -54,14 +60,18 @@ class Backend: """ Init elasticsearch client """ + self.es_url = es_url + self.mapping = {} self.logger = logging.getLogger("monitordaemon.backend") self.sysinfo = {} self.update_sys_info() logger.info("running on %(hostname)s (%(ipaddr)s)" % self.sysinfo) - - self.logger.info("connecting to backend at %s" % es_url) - self.es = Elasticsearch([es_url]) + + def connect(self): + self.logger.info("final mapping %s" % self.mapping) + self.logger.info("connecting to backend at %s" % self.es_url) + self.es = Elasticsearch([self.es_url]) self.logger.info("connected to backend") self.current_index = "" self.check_before_entry() @@ -84,8 +94,20 @@ class Backend: Check if current index exists, and if not, create it """ if not self.es.indices.exists(index=indexName): - self.logger.info("creating index %s" % indexName) - self.es.indices.create(index=indexName, ignore=400) # ignore already exists error + mapping = { + "mappings": { + "_default_":{ + "properties": { + "ipaddr": { + "type": "ip" + } + } + } + } + } + mapping["mappings"].update(self.mapping) + self.logger.info("creating index %s with mapping %s" % (indexName, mapping)) + self.es.indices.create(index=indexName, ignore=400, body=mapping)# ignore already exists error self.current_index = indexName def check_before_entry(self): @@ -126,6 +148,13 @@ class MonitorThread(Thread): self.checker_func = getattr(__import__(self.config["type"]), self.config["type"]) self.logger.info("checker func %s" % self.checker_func) + self.mapping = {} + #try: + self.mapping.update(__import__(self.config["type"]).mapping) + #except: + # pass + self.logger.info("mapping %s" % self.mapping) + self.alive = True self.delay = int(self.config["freq"]) self.lastRun = 0 diff --git a/pymonitor/monitors/uptime.py b/pymonitor/monitors/uptime.py index e6e360c..25cb061 100644 --- a/pymonitor/monitors/uptime.py +++ b/pymonitor/monitors/uptime.py @@ -2,5 +2,15 @@ def uptime(): with open("/proc/uptime", "r") as f: return {"uptime":int(float(f.read().split(" ")[0]))} +mapping = { + "uptime": { + "properties": { + "uptime": { + "type": "integer" + } + } + } +} + if __name__ == '__main__': print(uptime()["uptime"])