wormhole-server: add count-channels, count-events
This commit is contained in:
parent
56fec496e2
commit
1c963170c3
|
@ -66,3 +66,12 @@ sp_show_usage.set_defaults(func="usage/usage")
|
||||||
sp_tail_usage = s.add_parser("tail-usage", description="Follow latest usage",
|
sp_tail_usage = s.add_parser("tail-usage", description="Follow latest usage",
|
||||||
usage="wormhole server tail-usage")
|
usage="wormhole server tail-usage")
|
||||||
sp_tail_usage.set_defaults(func="usage/tail")
|
sp_tail_usage.set_defaults(func="usage/tail")
|
||||||
|
|
||||||
|
sp_count_channels = s.add_parser("count-channels",
|
||||||
|
description="Count active channels")
|
||||||
|
sp_count_channels.add_argument("--json", action="store_true")
|
||||||
|
sp_count_channels.set_defaults(func="usage/count-channels")
|
||||||
|
|
||||||
|
sp_count_events = s.add_parser("count-events", description="Count events")
|
||||||
|
sp_count_events.add_argument("--json", action="store_true")
|
||||||
|
sp_count_events.set_defaults(func="usage/count-events")
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import os, time
|
import os, time, json
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from .database import get_db
|
from .database import get_db
|
||||||
from ..errors import UsageError
|
from ..errors import UsageError
|
||||||
|
@ -54,6 +54,8 @@ def print_event(event):
|
||||||
))
|
))
|
||||||
|
|
||||||
def show_usage(args):
|
def show_usage(args):
|
||||||
|
print("closed for renovation")
|
||||||
|
return 0
|
||||||
if not os.path.exists("relay.sqlite"):
|
if not os.path.exists("relay.sqlite"):
|
||||||
raise UsageError("cannot find relay.sqlite, please run from the server directory")
|
raise UsageError("cannot find relay.sqlite, please run from the server directory")
|
||||||
oldest = None
|
oldest = None
|
||||||
|
@ -136,3 +138,105 @@ def tail_usage(args):
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
return 0
|
return 0
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
def count_channels(args):
|
||||||
|
if not os.path.exists("relay.sqlite"):
|
||||||
|
raise UsageError("cannot find relay.sqlite, please run from the server directory")
|
||||||
|
db = get_db("relay.sqlite")
|
||||||
|
c_list = []
|
||||||
|
c_dict = {}
|
||||||
|
def add(key, value):
|
||||||
|
c_list.append((key, value))
|
||||||
|
c_dict[key] = value
|
||||||
|
OLD = time.time() - 10*60
|
||||||
|
def q(query, values=()):
|
||||||
|
return db.execute(query, values).fetchone()[0]
|
||||||
|
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`"))
|
||||||
|
|
||||||
|
if args.json:
|
||||||
|
print(json.dumps(c_dict))
|
||||||
|
else:
|
||||||
|
for (key, value) in c_list:
|
||||||
|
print(key, value)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def count_events(args):
|
||||||
|
if not os.path.exists("relay.sqlite"):
|
||||||
|
raise UsageError("cannot find relay.sqlite, please run from the server directory")
|
||||||
|
db = get_db("relay.sqlite")
|
||||||
|
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]
|
||||||
|
|
||||||
|
add("apps", q("SELECT COUNT(DISTINCT(`app_id`)) FROM `nameplate_usage`"))
|
||||||
|
|
||||||
|
add("total nameplates", q("SELECT COUNT() FROM `nameplate_usage`"))
|
||||||
|
add("happy nameplates", q("SELECT COUNT() FROM `nameplate_usage`"
|
||||||
|
" WHERE `result`='happy'"))
|
||||||
|
add("lonely nameplates", q("SELECT COUNT() FROM `nameplate_usage`"
|
||||||
|
" WHERE `result`='lonely'"))
|
||||||
|
add("pruney nameplates", q("SELECT COUNT() FROM `nameplate_usage`"
|
||||||
|
" WHERE `result`='pruney'"))
|
||||||
|
add("crowded nameplates", q("SELECT COUNT() FROM `nameplate_usage`"
|
||||||
|
" WHERE `result`='crowded'"))
|
||||||
|
|
||||||
|
add("total mailboxes", q("SELECT COUNT() FROM `mailbox_usage`"))
|
||||||
|
add("happy mailboxes", q("SELECT COUNT() FROM `mailbox_usage`"
|
||||||
|
" WHERE `result`='happy'"))
|
||||||
|
add("scary mailboxes", q("SELECT COUNT() FROM `mailbox_usage`"
|
||||||
|
" WHERE `result`='scary'"))
|
||||||
|
add("lonely mailboxes", q("SELECT COUNT() FROM `mailbox_usage`"
|
||||||
|
" WHERE `result`='lonely'"))
|
||||||
|
add("errory mailboxes", q("SELECT COUNT() FROM `mailbox_usage`"
|
||||||
|
" WHERE `result`='errory'"))
|
||||||
|
add("pruney mailboxes", q("SELECT COUNT() FROM `mailbox_usage`"
|
||||||
|
" WHERE `result`='pruney'"))
|
||||||
|
add("crowded mailboxes", q("SELECT COUNT() FROM `mailbox_usage`"
|
||||||
|
" WHERE `result`='crowded'"))
|
||||||
|
|
||||||
|
add("total transit", q("SELECT COUNT() FROM `transit_usage`"))
|
||||||
|
add("happy transit", q("SELECT COUNT() FROM `transit_usage`"
|
||||||
|
" WHERE `result`='happy'"))
|
||||||
|
add("lonely transit", q("SELECT COUNT() FROM `transit_usage`"
|
||||||
|
" WHERE `result`='lonely'"))
|
||||||
|
add("errory transit", q("SELECT COUNT() FROM `transit_usage`"
|
||||||
|
" WHERE `result`='errory'"))
|
||||||
|
|
||||||
|
add("transit bytes", q("SELECT SUM(`total_bytes`) FROM `transit_usage`"))
|
||||||
|
|
||||||
|
if args.json:
|
||||||
|
print(json.dumps(c_dict))
|
||||||
|
else:
|
||||||
|
for (key, value) in c_list:
|
||||||
|
print(key, value)
|
||||||
|
return 0
|
||||||
|
|
|
@ -18,6 +18,12 @@ def dispatch(args):
|
||||||
if args.func == "usage/tail":
|
if args.func == "usage/tail":
|
||||||
from . import cmd_usage
|
from . import cmd_usage
|
||||||
return cmd_usage.tail_usage(args)
|
return cmd_usage.tail_usage(args)
|
||||||
|
if args.func == "usage/count-channels":
|
||||||
|
from . import cmd_usage
|
||||||
|
return cmd_usage.count_channels(args)
|
||||||
|
if args.func == "usage/count-events":
|
||||||
|
from . import cmd_usage
|
||||||
|
return cmd_usage.count_events(args)
|
||||||
|
|
||||||
raise ValueError("unknown args.func %s" % args.func)
|
raise ValueError("unknown args.func %s" % args.func)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user