Browse code

Add boobank-graphite.

Xavier G authored on29/10/2017 22:01:12
Showing1 changed files

1 1
new file mode 100755
... ...
@@ -0,0 +1,52 @@
1
+#!/usr/bin/env python
2
+# -*- coding: utf-8 -*-
3
+
4
+import sys
5
+import json
6
+import time
7
+import socket
8
+
9
+
10
+def main():
11
+    accounts = get_accounts()
12
+    timestamp = time.time()
13
+    socket = graphite_connect()
14
+    for account in accounts.get('data', []):
15
+        send_account(socket, account, timestamp)
16
+    socket.close()
17
+
18
+def graphite_connect():
19
+    if len(sys.argv) == 4:
20
+        socket_args = (sys.argv[2], int(sys.argv[3]))
21
+    elif len(sys.argv) == 3:
22
+        socket_args = (sys.argv[2], 2003)
23
+    else:
24
+        socket_args = ('::1', 2003)
25
+    graphite_socket = socket.socket()
26
+    graphite_socket.connect(socket_args)
27
+    return graphite_socket
28
+
29
+def get_accounts():
30
+    try:
31
+        accounts_json_path = sys.argv[1]
32
+    except IndexError:
33
+        accounts_json_path = '-'
34
+    if accounts_json_path == '-':
35
+        return json.load(sys.stdin)
36
+    else:
37
+        with open(accounts_json_path, 'r') as filedesc:
38
+            return json.load(filedesc)
39
+
40
+def get_path(account):
41
+    (id, bank) = account['id'].split('@')
42
+    currency = account.get('currency', 'EUR').lower()
43
+    return 'bank.%s.%s-balance-%s' % (bank, id, currency)
44
+
45
+def send_account(socket, account, timestamp):
46
+    pattern = '%s %.2f %d\n'
47
+    values = (get_path(account), account['balance'], int(timestamp))
48
+    line = pattern % values
49
+    socket.send(line)
50
+
51
+if __name__ == '__main__':
52
+    main()