reestructure project following usual python structure

This commit is contained in:
quimnuss 2023-01-08 18:57:35 +01:00
pare 8f0c59eb30
commit a806bbe859
S'han modificat 9 arxius amb 63 adicions i 34 eliminacions

3
federation/__init__.py Normal file
Veure arxiu

@ -0,0 +1,3 @@
#!/usr/bin/env python3
from .database import Database

Veure arxiu

@ -4,7 +4,6 @@ from datetime import datetime
import pytz import pytz
from mastodon import Mastodon from mastodon import Mastodon
from mastodon.Mastodon import MastodonMalformedEventError, MastodonNetworkError, MastodonReadTimeout, MastodonAPIError, MastodonIllegalArgumentError from mastodon.Mastodon import MastodonMalformedEventError, MastodonNetworkError, MastodonReadTimeout, MastodonAPIError, MastodonIllegalArgumentError
import pdb
class Setup(): class Setup():
@ -79,7 +78,7 @@ class Setup():
client_secret = response[1] client_secret = response[1]
mastodon = Mastodon(client_id = client_id, client_secret = client_secret, api_base_url = self.mastodon_hostname) mastodon = Mastodon(client_id = client_id, client_secret = client_secret, api_base_url = self.mastodon_hostname)
token = mastodon.log_in( token = mastodon.log_in(
self.mastodon_user, self.mastodon_user,
self.mastodon_password, self.mastodon_password,

Veure arxiu

@ -6,7 +6,7 @@ import urllib3
import requests import requests
import socket import socket
from setup import Setup from setup import Setup
from database import Database from federation import Database
from mastodon import Mastodon from mastodon import Mastodon
from matplotlib import pyplot as plt from matplotlib import pyplot as plt
import matplotlib.dates as mdates import matplotlib.dates as mdates
@ -31,7 +31,8 @@ plt.rc('figure', titlesize=BIGGER_SIZE) # fontsize of the figure title
mdates.set_epoch('2000-01-01T00:00:00') mdates.set_epoch('2000-01-01T00:00:00')
y_formatter = ScalarFormatter(useOffset=False) y_formatter = ScalarFormatter(useOffset=False)
ray.init(num_cpus = 25) # Specify this system CPUs. ray.init(num_cpus=25) # Specify this system CPUs.
class Server: class Server:
@ -54,7 +55,8 @@ class Server:
try: try:
data = requests.get('https://' + self + api, headers = setup.user_agent, timeout=3) data = requests.get('https://' + self + api,
headers=setup.user_agent, timeout=3)
nodeinfo_json = data.json() nodeinfo_json = data.json()
@ -65,7 +67,8 @@ class Server:
users = 1 users = 1
mau = nodeinfo_json.get('usage').get('users').get('activeMonth') or '0' mau = nodeinfo_json.get('usage').get(
'users').get('activeMonth') or '0'
if software == 'socialhome': if software == 'socialhome':
@ -91,7 +94,7 @@ class Server:
soft_version = "" soft_version = ""
else: else:
if api == '/api/v1/instance': if api == '/api/v1/instance':
@ -115,7 +118,8 @@ class Server:
if soft_version != "" and soft_version is not None: if soft_version != "" and soft_version is not None:
print(f'\n** Server {self} ({software} {soft_version}) is alive! **') print(
f'\n** Server {self} ({software} {soft_version}) is alive! **')
else: else:
@ -123,11 +127,13 @@ class Server:
if software != 'birdsitelive': if software != 'birdsitelive':
db.write_alive_server(self, software, soft_version, alive, api, users, downs, first_checked_at, mau) db.write_alive_server(
self, software, soft_version, alive, api, users, downs, first_checked_at, mau)
else: else:
db.write_blocked_software(self, software, soft_version, alive, api, users, downs, first_checked_at) db.write_blocked_software(
self, software, soft_version, alive, api, users, downs, first_checked_at)
except urllib3.exceptions.ProtocolError as protoerr: except urllib3.exceptions.ProtocolError as protoerr:
@ -205,10 +211,12 @@ class Server:
return (self, software, soft_version, alive, api, users, downs, first_checked_at, mau) return (self, software, soft_version, alive, api, users, downs, first_checked_at, mau)
def print_dead(server): def print_dead(server):
print(f'\nServer {server} is dead :-(') print(f'\nServer {server} is dead :-(')
if __name__ == '__main__': if __name__ == '__main__':
db = Database() db = Database()
@ -226,9 +234,9 @@ if __name__ == '__main__':
now = start now = start
mastodon = Mastodon( mastodon = Mastodon(
access_token = setup.mastodon_app_token, access_token=setup.mastodon_app_token,
api_base_url= setup.mastodon_hostname api_base_url=setup.mastodon_hostname
) )
total_servers = 0 total_servers = 0
@ -242,9 +250,11 @@ if __name__ == '__main__':
ray_start = time.time() ray_start = time.time()
results = ray.get([getservers.get_alive_servers.remote(server) for server in alive_servers]) results = ray.get([getservers.get_alive_servers.remote(server)
for server in alive_servers])
print(f"duration = {time.time() - ray_start}.\nprocessed servers: {len(results)}") print(
f"duration = {time.time() - ray_start}.\nprocessed servers: {len(results)}")
# get current total servers and users, get users from every software # get current total servers and users, get users from every software
@ -252,7 +262,8 @@ if __name__ == '__main__':
# get last check values and write current total ones # get last check values and write current total ones
evo_servers, evo_users, evo_mau = db.last_values(total_servers, total_users, total_mau) evo_servers, evo_users, evo_mau = db.last_values(
total_servers, total_users, total_mau)
# write evo values # write evo values
@ -273,11 +284,14 @@ if __name__ == '__main__':
############################################################################### ###############################################################################
# generate graphs # generate graphs
plt.plot([-6, -5, -4, -3, -2, -1, 0], [servers_plots[6], servers_plots[5], servers_plots[4], servers_plots[3], servers_plots[2], servers_plots[1], servers_plots[0]], marker='o', color='mediumseagreen') plt.plot([-6, -5, -4, -3, -2, -1, 0], [servers_plots[6], servers_plots[5], servers_plots[4], servers_plots[3],
servers_plots[2], servers_plots[1], servers_plots[0]], marker='o', color='mediumseagreen')
plt.plot([-6, -5, -4, -3, -2, -1, 0], [max_servers, max_servers, max_servers, max_servers, max_servers, max_servers, max_servers], color='red') plt.plot([-6, -5, -4, -3, -2, -1, 0], [max_servers, max_servers, max_servers,
max_servers, max_servers, max_servers, max_servers], color='red')
plt.title('fediverse: total alive servers (max: ' + str(f"{max_servers:,}" + ')'), loc='right', color='blue') plt.title('fediverse: total alive servers (max: ' +
str(f"{max_servers:,}" + ')'), loc='right', color='blue')
plt.xlabel('Last seven days') plt.xlabel('Last seven days')
@ -291,13 +305,17 @@ if __name__ == '__main__':
plt.close() plt.close()
plt.plot([-6, -5, -4, -3, -2, -1, 0], [mau_plots[6], mau_plots[5], mau_plots[4], mau_plots[3], mau_plots[2], mau_plots[1], mau_plots[0]], marker='o', color='royalblue') plt.plot([-6, -5, -4, -3, -2, -1, 0], [mau_plots[6], mau_plots[5], mau_plots[4],
mau_plots[3], mau_plots[2], mau_plots[1], mau_plots[0]], marker='o', color='royalblue')
plt.plot([-6, -5, -4, -3, -2, -1, 0], [max_mau, max_mau, max_mau, max_mau, max_mau, max_mau, max_mau], color='red') plt.plot([-6, -5, -4, -3, -2, -1, 0], [max_mau, max_mau, max_mau,
max_mau, max_mau, max_mau, max_mau], color='red')
plt.title('fediverse: total MAU (max: ' + str(f"{max_mau:,}" + ')'), loc='right', color='royalblue') plt.title('fediverse: total MAU (max: ' +
str(f"{max_mau:,}" + ')'), loc='right', color='royalblue')
plt.legend(('mau', 'max'), shadow=True, loc=(0.01, 0.80), handlelength=1.5, fontsize=10) plt.legend(('mau', 'max'), shadow=True, loc=(
0.01, 0.80), handlelength=1.5, fontsize=10)
plt.xlabel('Last seven days') plt.xlabel('Last seven days')
@ -310,9 +328,9 @@ if __name__ == '__main__':
plt.close() plt.close()
df = pd.DataFrame({'date': np.array(global_week), df = pd.DataFrame({'date': np.array(global_week),
#'servers': np.array(global_servers), #'servers': np.array(global_servers),
'users': np.array(global_users), 'users': np.array(global_users),
'mau': np.array(global_mau)}) 'mau': np.array(global_mau)})
df['date'] = pd.to_datetime(df['date']) df['date'] = pd.to_datetime(df['date'])
@ -349,25 +367,30 @@ if __name__ == '__main__':
if evo_servers >= 0: if evo_servers >= 0:
toot_text += "alive servers: " + str(f"{total_servers:,}") + " (+"+ str(f"{evo_servers:,}") + ") \n" toot_text += "alive servers: " + \
str(f"{total_servers:,}") + \
" (+" + str(f"{evo_servers:,}") + ") \n"
toot_text += "max: " + str(f"{max_servers:,}") + "\n" toot_text += "max: " + str(f"{max_servers:,}") + "\n"
elif evo_servers < 0: elif evo_servers < 0:
toot_text += "alive servers: " + str(f"{total_servers:,}") + " ("+ str(f"{evo_servers:,}") + ") \n" toot_text += "alive servers: " + \
str(f"{total_servers:,}") + " (" + str(f"{evo_servers:,}") + ") \n"
toot_text += "max: " + str(f"{max_servers:,}") + "\n" toot_text += "max: " + str(f"{max_servers:,}") + "\n"
if evo_mau >= 0: if evo_mau >= 0:
toot_text += "total MAU: " + str(f"{total_mau:,}") + " (+"+ str(f"{evo_mau:,}") + ") \n" toot_text += "total MAU: " + \
str(f"{total_mau:,}") + " (+" + str(f"{evo_mau:,}") + ") \n"
toot_text += "max: " + str(f"{max_mau:,}") + "\n" toot_text += "max: " + str(f"{max_mau:,}") + "\n"
elif evo_mau < 0: elif evo_mau < 0:
toot_text += "total MAU: " + str(f"{total_mau:,}") + " ("+ str(f"{evo_mau:,}") + ") \n" toot_text += "total MAU: " + \
str(f"{total_mau:,}") + " (" + str(f"{evo_mau:,}") + ") \n"
toot_text += "max: " + str(f"{max_mau:,}") + "\n" toot_text += "max: " + str(f"{max_mau:,}") + "\n"
@ -397,13 +420,17 @@ if __name__ == '__main__':
print(toot_text) print(toot_text)
servers_image_id = mastodon.media_post('servers.png', "image/png", description='servers graph').id servers_image_id = mastodon.media_post(
'servers.png', "image/png", description='servers graph').id
mau_image_id = mastodon.media_post('mau.png', "image/png", description='MAU graph').id mau_image_id = mastodon.media_post(
'mau.png', "image/png", description='MAU graph').id
global_image_id = mastodon.media_post('global.png', "image/png", description='global graph').id global_image_id = mastodon.media_post(
'global.png', "image/png", description='global graph').id
mastodon.status_post(toot_text, in_reply_to_id=None, media_ids={servers_image_id, mau_image_id, global_image_id}) mastodon.status_post(toot_text, in_reply_to_id=None, media_ids={
servers_image_id, mau_image_id, global_image_id})
db.delete_dead_servers() db.delete_dead_servers()

0
tests/test_database.py Normal file
Veure arxiu