74 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#! /usr/bin/env python
 | 
						|
 | 
						|
"""
 | 
						|
Use the following in /etc/munin/plugin-conf.d/wormhole :
 | 
						|
 | 
						|
[wormhole_*]
 | 
						|
env.serverdir /path/to/your/wormhole/server
 | 
						|
"""
 | 
						|
 | 
						|
import os, sys, time, sqlite3
 | 
						|
 | 
						|
def count_events():
 | 
						|
    serverdir = os.environ["serverdir"]
 | 
						|
    dbfile = os.path.join(serverdir, "relay.sqlite")
 | 
						|
    if not os.path.exists(dbfile):
 | 
						|
        print "cannot find relay.sqlite, please set env.serverdir"
 | 
						|
        sys.exit(1)
 | 
						|
    db = sqlite3.connect(dbfile)
 | 
						|
    db.row_factory = sqlite3.Row
 | 
						|
 | 
						|
    c_list = []
 | 
						|
    c_dict = {}
 | 
						|
    def add(key, value):
 | 
						|
        c_list.append((key, value))
 | 
						|
        c_dict[key] = value
 | 
						|
    def q(query, values=()):
 | 
						|
        return db.execute(query, values).fetchone()[0]
 | 
						|
    OLD = time.time() - 10*60
 | 
						|
    add("apps", q("SELECT COUNT(DISTINCT(`app_id`)) FROM `nameplates`"))
 | 
						|
 | 
						|
    add("total nameplates", q("SELECT COUNT() FROM `nameplates`"))
 | 
						|
    add("waiting nameplates", q("SELECT COUNT() FROM `nameplates`"
 | 
						|
                                " WHERE `second` is null"))
 | 
						|
    add("connected nameplates", q("SELECT COUNT() FROM `nameplates`"
 | 
						|
                                  " WHERE `second` is not null"))
 | 
						|
    add("stale nameplates", q("SELECT COUNT() FROM `nameplates`"
 | 
						|
                              " where `updated` < ?", (OLD,)))
 | 
						|
 | 
						|
    add("total mailboxes", q("SELECT COUNT() FROM `mailboxes`"))
 | 
						|
    add("waiting mailboxes", q("SELECT COUNT() FROM `mailboxes`"
 | 
						|
                                " WHERE `second` is null"))
 | 
						|
    add("connected mailboxes", q("SELECT COUNT() FROM `mailboxes`"
 | 
						|
                                 " WHERE `second` is not null"))
 | 
						|
 | 
						|
    stale_mailboxes = 0
 | 
						|
    for mbox_row in db.execute("SELECT * FROM `mailboxes`").fetchall():
 | 
						|
        newest = db.execute("SELECT `server_rx` FROM `messages`"
 | 
						|
                            " WHERE `app_id`=? AND `mailbox_id`=?"
 | 
						|
                            " ORDER BY `server_rx` DESC LIMIT 1",
 | 
						|
                            (mbox_row["app_id"], mbox_row["id"])).fetchone()
 | 
						|
        if newest and newest[0] < OLD:
 | 
						|
            stale_mailboxes += 1
 | 
						|
    add("stale mailboxes", stale_mailboxes)
 | 
						|
 | 
						|
    add("messages", q("SELECT COUNT() FROM `messages`"))
 | 
						|
 | 
						|
    return c_dict
 | 
						|
 | 
						|
CONFIG = """\
 | 
						|
graph_title Magic-Wormhole Queued Messages
 | 
						|
graph_vlabel Messages
 | 
						|
graph_category network
 | 
						|
messages.label Total Messages
 | 
						|
messages.draw LINE2
 | 
						|
messages.type GAUGE
 | 
						|
"""
 | 
						|
 | 
						|
if len(sys.argv) > 1 and sys.argv[1] == "config":
 | 
						|
    print CONFIG.rstrip()
 | 
						|
    sys.exit(0)
 | 
						|
 | 
						|
c = count_events()
 | 
						|
print "messages.value", c["messages"]
 |