76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
import memoize.djangocache
|
|
|
|
import funkwhale_api
|
|
from funkwhale_api.common import preferences
|
|
|
|
from . import stats
|
|
|
|
|
|
store = memoize.djangocache.Cache('default')
|
|
memo = memoize.Memoizer(store, namespace='instance:stats')
|
|
|
|
|
|
def get():
|
|
share_stats = preferences.get('instance__nodeinfo_stats_enabled')
|
|
private = preferences.get('instance__nodeinfo_private')
|
|
data = {
|
|
'version': '2.0',
|
|
'software': {
|
|
'name': 'funkwhale',
|
|
'version': funkwhale_api.__version__
|
|
},
|
|
'protocols': ['activitypub'],
|
|
'services': {
|
|
'inbound': [],
|
|
'outbound': []
|
|
},
|
|
'openRegistrations': preferences.get('users__registration_enabled'),
|
|
'usage': {
|
|
'users': {
|
|
'total': 0,
|
|
}
|
|
},
|
|
'metadata': {
|
|
'private': preferences.get('instance__nodeinfo_private'),
|
|
'shortDescription': preferences.get('instance__short_description'),
|
|
'longDescription': preferences.get('instance__long_description'),
|
|
'nodeName': preferences.get('instance__name'),
|
|
'library': {
|
|
'federationEnabled': preferences.get('federation__enabled'),
|
|
'federationNeedsApproval': preferences.get('federation__music_needs_approval'),
|
|
'anonymousCanListen': preferences.get('common__api_authentication_required'),
|
|
},
|
|
}
|
|
}
|
|
if share_stats:
|
|
getter = memo(
|
|
lambda: stats.get(),
|
|
max_age=600
|
|
)
|
|
statistics = getter()
|
|
data['usage']['users']['total'] = statistics['users']
|
|
data['metadata']['library']['tracks'] = {
|
|
'total': statistics['tracks'],
|
|
}
|
|
data['metadata']['library']['artists'] = {
|
|
'total': statistics['artists'],
|
|
}
|
|
data['metadata']['library']['albums'] = {
|
|
'total': statistics['albums'],
|
|
}
|
|
data['metadata']['library']['music'] = {
|
|
'hours': statistics['music_duration']
|
|
}
|
|
|
|
data['metadata']['usage'] = {
|
|
'favorites': {
|
|
'tracks': {
|
|
'total': statistics['track_favorites'],
|
|
}
|
|
},
|
|
'listenings': {
|
|
'total': statistics['listenings']
|
|
}
|
|
}
|
|
return data
|