misc-fred/munin/publik_count

61 lines
1.7 KiB
Python
Executable File

#! /usr/bin/python3
#%# family=auto
#%# capabilities=autoconf
import pickle
import os
import psycopg2
import itertools
import sys
base_dir = None
for dirname in os.listdir('/var/lib/machines/'):
if os.path.exists(os.path.join('/var/lib/machines/', dirname, 'var/lib/wcs')):
base_dir = os.path.join('/var/lib/machines/', dirname, 'var/lib/wcs')
break
if len(sys.argv) == 2 and sys.argv[1] == 'autoconf':
if base_dir:
print('yes')
else:
print('no')
sys.exit(0)
if len(sys.argv) == 2 and sys.argv[1] == 'config':
print('''graph_title Count of submitted forms
graph_category entrouvert
count.label Count
''')
sys.exit(0)
total = 0
for tenant in itertools.chain(os.listdir(base_dir), os.listdir(os.path.join(base_dir, 'tenants'))):
if tenant in ('collectstatic', 'scripts', 'skeletons', 'spooler', 'tenants'):
continue
if tenant.endswith('.invalid'):
continue
dirname = os.path.join(base_dir, tenant)
if not os.path.exists(dirname):
dirname = os.path.join(base_dir, 'tenants', tenant)
if not os.path.isdir(dirname):
continue
cfg = pickle.load(open(os.path.join(dirname, 'config.pck'), 'rb'), encoding='utf-8')
if 'postgresql' not in cfg:
continue
psql_cfg = {}
for k, v in cfg['postgresql'].items():
if v and isinstance(v, (int, str)):
psql_cfg[k] = v
pgconn = psycopg2.connect(**psql_cfg)
cur = pgconn.cursor()
try:
cur.execute('''SELECT COUNT(*) from wcs_all_forms WHERE status != 'draft' ''')
except psycopg2.ProgrammingError:
pass
else:
total += cur.fetchone()[0]
pgconn.close()
print('count.value', total)