reestructure project following usual python structure
This commit is contained in:
pare
8f0c59eb30
commit
a806bbe859
S'han modificat 9 arxius amb 63 adicions i 34 eliminacions
3
federation/__init__.py
Normal file
3
federation/__init__.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from .database import Database
|
|
@ -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,
|
|
@ -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
0
tests/test_database.py
Normal file
Loading…
Referencia en una nova incidència