Newer
Older
import semver
def serialize_domain(data):
return {"name": data["name"]}
def serialize_check(raw):
data = {
"up": raw["up"],
"time": raw["time"].isoformat(),
"usage": {
"users": {
"total": raw["usage_users_total"],
"activeHalfyear": raw["usage_users_active_half_year"],
"activeMonth": raw["usage_users_active_month"],
},
"listenings": {"total": raw["usage_listenings_total"]},
"downloads": {"total": raw["usage_downloads_total"]},
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
},
"library": {
"music": {"hours": raw["library_music_hours"]},
"tracks": {"total": raw["library_tracks_total"]},
"albums": {"total": raw["library_albums_total"]},
"artists": {"total": raw["library_artists_total"]},
},
"settings": {
"federationEnabled": raw["federation_enabled"],
"openRegistrations": raw["open_registrations"],
"anonymousCanListen": raw["anonymous_can_listen"],
},
"software": {
"name": raw["software_name"],
"versionDetail": {
"major": raw["software_version_major"],
"minor": raw["software_version_minor"],
"patch": raw["software_version_patch"],
"prerelease": raw["software_prerelease"],
"build": raw["software_build"],
},
},
}
try:
data["software"]["version"] = semver.format_version(
major=raw["software_version_major"],
minor=raw["software_version_minor"],
patch=raw["software_version_patch"],
prerelease=raw["software_prerelease"],
build=raw["software_build"],
)
except (TypeError, ValueError):
data["software"]["version"] = ""
return data
def serialize_domain_from_check(data):
data = data.copy()
data.pop("name", None)
data.pop("blocked", None)
if "time" in data:
data["time"] = data["time"].isoformat()
name = data.pop("domain")
return {
"name": name,
"node_name": data.pop("node_name"),
"first_seen": data.pop("first_seen").isoformat(),
"lastCheck": data,
}
def serialize_rss_feed_from_checks(checks):
feed = [
'<?xml version="1.0" encoding="UTF-8" ?>',
'<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">',
" <channel>",
" <title>Latest Funkwhale pods</title>",
" <link>https://network.funkwhale.audio/dashboards/</link>",
" <description>Latest known pods from the Funkwhale network.</description>",
" <language>en</language>",
]
sorted_checks = sorted(checks, key=lambda check: check["first_seen"], reverse=True)
for check in sorted_checks:
first_seen = check["first_seen"]
ctime = first_seen.ctime()
pub_date = "{}, {:02d} {}".format(
ctime[0:3], first_seen.day, ctime[4:7]
) + first_seen.strftime(" %Y %H:%M:%S %z")
feed += [
" <item>",
" <title>{}</title>".format(check["domain"]),
" <link>https://{}/about</link>".format(check["domain"]),
" <pubDate>{}</pubDate>".format(pub_date),
" </item>",
]
feed += [
" </channel>",
"</rss>",
]