stats/app/libraries/nodeinfo.py

86 líneas
2,3 KiB
Python
Original Vista normal Històric

2023-04-08 13:15:29 +02:00
import time
from datetime import datetime
import os
import json
import sys
import os.path
import requests
import urllib3
import socket
from app.libraries.database import Database
from app.libraries.setup import Setup
def is_json(myjson):
try:
json_object = json.loads(myjson)
except ValueError as e:
return False
return True
class Nodeinfo():
name = "Query server nodeinfo data"
def __init__(self, server=None, db=None, setup=None, soft=None, soft_version=None, version=None, users=None, mau=None, alive=False):
self.server = server
self.db = Database()
self.setup = Setup()
self.soft = ''
self.soft_version = ''
self.users = 0
self.mau = 0
self.alive = alive
def getdata(self, server, api):
if server.find(".") == -1:
return
if server.find("@") != -1:
return
if server.find("/") != -1:
return
if server.find(":") != -1:
return
url = 'https://' + server
self.soft = ''
self.soft_version = ''
self.users = 0
self.mau = 0
self.alive = False
try:
response = requests.get(url + api, headers = self.setup.user_agent, timeout=3)
if response.status_code == 200:
try:
self.soft = response.json()['software']['name']
self.soft = self.soft.lower()
self.soft_version = response.json()['software']['version']
self.users = response.json().get('usage').get('users').get('total') or '0'
if int(self.users) > 1500000:
return
self.mau = response.json().get('usage').get('users').get('activeMonth') or 0
self.alive = True
print(f"Server {server} ({self.soft} {self.soft_version}) is alive!")
print('*********************************************************************')
except:
Nodeinfo.pending_servers = Nodeinfo.pending_servers - 1
pass
except:
pass
return (server, self.soft, self.soft_version, self.users, self.mau, self.alive)