Skip to content

Commit

Permalink
Merge pull request #23 from p2p-org/parachains
Browse files Browse the repository at this point in the history
Onboarding of some parachains
  • Loading branch information
base1217 authored Jan 4, 2024
2 parents 8b8a6d1 + 0779a91 commit 9b8f18b
Show file tree
Hide file tree
Showing 17 changed files with 1,681 additions and 0 deletions.
10 changes: 10 additions & 0 deletions exporters/acala/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM --platform=linux/amd64 python:3.9.10-slim-buster

WORKDIR /

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY exporter.py app.py

CMD ["python3", "app.py"]
6 changes: 6 additions & 0 deletions exporters/acala/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
api_substrate: https://acala-api.polka.p2p.world/api
chain: acala
exporter:
listen: 0.0.0.0
port: 9618
137 changes: 137 additions & 0 deletions exporters/acala/exporter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
#!/usr/bin/env python3

import threading
import requests
import yaml
import time
import json
import logging
from collections import deque
from flask import Flask, request, make_response

logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', level=logging.INFO, datefmt='%Y-%m-%d %I:%M:%S')
app = Flask(__name__)

@app.route("/metrics")
def metrics():
chain = get_config('chain')
metrics = q_metrics[0].copy()

out = ""

try:
out += '# HELP acala_session_common Common metrics\n'
out += '# TYPE acala_session_common Common metrics counter\n'

for k,v in metrics['common'].items():
out += 'acala_session_common{name="%s",chain="%s"} %s\n' % (k,chain,v)
except KeyError:
pass

try:
out += '# HELP acala_session_active_validators Active validators\n'
out += '# TYPE acala_session_active_validators Active validators counter\n'

for k,v in metrics['validators'].items():
out += 'acala_session_active_validators{chain="%s"} %s\n' % (chain,k)
except KeyError:
pass

try:
out += '# HELP acala_rewards_validator Points earned\n'
out += '# TYPE acala_rewards_validator Points earned counter\n'

for k in metrics['validators'].items():
out += 'acala_rewards_validator{chain="%s" } %s\n' % (chain,k)
except KeyError:
pass

response = make_response(out, 200)
response.mimetype = "text/plain"

return response

def api_request(endpoint = "api_substrate",method = None,args = None):
if endpoint == 'api_substrate':
url = get_config('api_substrate')

if isinstance(args, list):
for i in range(len(args)):
if isinstance(args[i], str):
args[i] = '"' + args[i] + '"'
elif isinstance(args, str):
args = '"' + args + '"'
elif not args:
args = ""

data = {'method': method,
'args': args}

elif endpoint == 'api_registry':
url = get_config('api_registry')

data = {'method': method}

try:
r = requests.post(url, json=data)
except (ConnectionRefusedError,requests.exceptions.ConnectionError):
logging.critical('Coulnd not get data from ' + endpoint)

return None

if r.status_code == 200:
return r.json()['result']
else:
logging.critical('Request to ' + endpoint + ' finished with code ' + str(r.status_code))
return None

def get_config(part):
with open('./config.yaml') as config_file:
data = yaml.load(config_file, Loader=yaml.FullLoader)

return data[part]

def main():
block = 0
session = 0

while True:
try:
last_block = int(api_request(method = 'api.query.system.number'),16)

if last_block != block:
validators = api_request(method = 'api.query.session.validators')
current_session = int(api_request(method = 'api.query.session.currentIndex'),16)
disabled_validators = api_request(method = 'api.query.session.disabledValidators')
result = {'validators':{},'common':{}}
result['common'] = {}
result['common']['active_validators_count'] = len(validators)
result['common']['current_session'] = current_session
for addr in validators:
points = int(api_request(method = 'api.query.collatorSelection.sessionPoints', args = addr),16)
validator_points = {k:points for k in validators if k == addr}
result['validators'].update(validator_points)

q_metrics.clear()
q_metrics.append(result)
session = current_session
block = last_block

except Exception as e:
logging.critical(e)
time.sleep(3)
continue

time.sleep(3)

if __name__ == '__main__':
endpoint_listen = get_config('exporter')['listen']
endpoint_port = get_config('exporter')['port']

q_metrics = deque([])

worker = threading.Thread(target=main)
worker.daemon = True
worker.start()

app.run(host="0.0.0.0", port=int(endpoint_port))
3 changes: 3 additions & 0 deletions exporters/acala/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
flask
requests
pyyaml
10 changes: 10 additions & 0 deletions exporters/astar/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM --platform=linux/amd64 python:3.9.10-slim-buster

WORKDIR /

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY exporter.py app.py

CMD ["python3", "app.py"]
10 changes: 10 additions & 0 deletions exporters/astar/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
api_substrate: https://shiden-api.polka.p2p.world/api
api_registry: https://registry-para-api.polka.p2p.world/api
chain: shiden
exporter:
listen: 0.0.0.0
port: 9618
validators:
scaleway-shiden-collator1:
account: 'ZPsVRDiDTsWr9wENxE5iyBFCd2ySckF9mn8PtGSevnKjMwU'
Loading

0 comments on commit 9b8f18b

Please sign in to comment.