diff --git a/exporter.py b/exporter.py index d6f9e85..fdb7724 100644 --- a/exporter.py +++ b/exporter.py @@ -1,6 +1,7 @@ import os import sys import firefly.budgets +import firefly.accounts from flask import Flask @@ -18,4 +19,4 @@ app = Flask(__name__) @app.route('/metrics') def metric(): - return firefly.budgets.get_budget_metrics() + return firefly.budgets.get_budget_metrics() + firefly.accounts.get_account_metrics() diff --git a/firefly/accounts.py b/firefly/accounts.py new file mode 100644 index 0000000..aad6806 --- /dev/null +++ b/firefly/accounts.py @@ -0,0 +1,50 @@ +"""Expose account metrics.""" +import os +import calendar +import datetime + +import requests +import dateutil.parser + + +header = {"Authorization": "Bearer " + os.environ.get('FIREFLY_PERSONAL_ACCESS_TOKEN')} +host = os.environ.get('FIREFLY_API_HOST') + + +def _get_asset_accounts(): + accounts_json = requests.get( + host + "/api/v1/accounts", headers=header + ).json() + accounts = accounts_json.get('data') + while "next" in accounts_json.get('links'): + accounts_json = requests.get( + accounts_json.get('links').get('next'), headers=header + ).json() + accounts.extend(accounts_json.get('data')) + + asset_accounts = [] + for account in accounts: + if account.get('attributes').get('type') == "asset": + asset_accounts.append(account) + return asset_accounts + + +def get_account_metrics(): + out = "" + for asset_account in _get_asset_accounts(): + account_id = asset_account.get('id') + account_name = asset_account.get('attributes').get('name') + account_balance = asset_account.get('attributes').get('current_balance') + account_balance_date = int( + dateutil.parser.parse( + asset_account.get('attributes').get('current_balance_date') + ).timestamp() + ) + + out += 'firefly_asset_account_balance{{account_id="{}",account_name="{}",balance_date="{}"}} {}\n'.format( + account_id, + account_name, + account_balance_date, + account_balance, + ) + return out