rewrite: Analytics client-server model.

This commit is contained in:
2022-11-18 18:53:02 +02:00
parent b471e78a75
commit fe51a8d150
11 changed files with 559 additions and 11 deletions

186
bot/analytics/data.py Normal file
View File

@@ -0,0 +1,186 @@
from enum import Enum
from data.registry import Registry
from data.adapted import RegisterEnum
from data.models import RowModel
from data.columns import Integer, String, Timestamp, Column
class CommandStatus(Enum):
"""
Schema
------
CREATE TYPE analytics.CommandStatus AS ENUM(
'COMPLETED',
'CANCELLED'
'FAILED'
);
"""
COMPLETED = ('COMPLETED',)
CANCELLED = ('CANCELLED',)
FAILED = ('FAILED',)
class GuildAction(Enum):
"""
Schema
------
CREATE TYPE analytics.GuildAction AS ENUM(
'JOINED',
'LEFT'
);
"""
JOINED = ('JOINED',)
LEFT = ('LEFT',)
class VoiceAction(Enum):
"""
Schema
------
CREATE TYPE analytics.VoiceAction AS ENUM(
'JOINED',
'LEFT'
);
"""
JOINED = ('JOINED',)
LEFT = ('LEFT',)
class AnalyticsData(Registry, name='analytics'):
CommandStatus = RegisterEnum(CommandStatus, name="analytics.CommandStatus")
GuildAction = RegisterEnum(GuildAction, name="analytics.GuildAction")
VoiceAction = RegisterEnum(VoiceAction, name="analytics.VoiceAction")
class Snapshots(RowModel):
"""
Schema
------
CREATE TABLE analytics.snapshots(
snapshotid SERIAL PRIMARY KEY,
appname TEXT NOT NULL REFERENCES bot_config (appname),
guild_count INTEGER NOT NULL,
study_time BIGINT NOT NULL,
in_voice INTEGER NOT NULL,
_created_at TIMESTAMPTZ NOT NULL DEFAULT (now() at time zone 'utc')
);
"""
_schema_ = 'analytics'
_tablename_ = 'snapshots'
snapshotid = Integer(primary=True)
appname = String()
guild_count = Integer()
in_voice = Integer()
study_time = Integer()
created_at = Timestamp()
class Events(RowModel):
"""
Schema
------
CREATE TABLE analytics.events(
eventid SERIAL PRIMARY KEY,
appname TEXT NOT NULL REFERENCES bot_config (appname),
ctxid BIGINT,
guildid BIGINT,
_created_at TIMESTAMPTZ NOT NULL DEFAULT (now() at time zone 'utc')
);
"""
_schema_ = 'analytics'
_tablename_ = 'events'
eventid = Integer(primary=True)
appname = String()
ctxid = Integer()
guildid = Integer()
created_at = Timestamp()
class Commands(RowModel):
"""
Schema
------
CREATE TABLE analytics.commands(
cmdname TEXT NOT NULL,
cogname TEXT,
userid BIGINT NOT NULL,
status analytics.CommandStatus NOT NULL,
execution_time INTEGER NOT NULL
) INHERITS (analytics.events);
"""
_schema_ = 'analytics'
_tablename_ = 'commands'
eventid = Integer(primary=True)
appname = String()
ctxid = Integer()
guildid = Integer()
created_at = Timestamp()
cmdname = String()
cogname = String()
userid = Integer()
status: Column[CommandStatus] = Column()
execution_time = Integer()
class Guilds(RowModel):
"""
Schema
------
CREATE TABLE analytics.guilds(
guildid BIGINT NOT NULL,
action analytics.GuildAction NOT NULL
) INHERITS (analytics.events);
"""
_schema_ = 'analytics'
_tablename_ = 'guilds'
eventid = Integer(primary=True)
appname = String()
ctxid = Integer()
guildid = Integer()
created_at = Timestamp()
action: Column[GuildAction] = Column()
class VoiceSession(RowModel):
"""
Schema
------
CREATE TABLE analytics.voice_sessions(
userid BIGINT NOT NULL,
action analytics.VoiceAction NOT NULL
);
"""
_schema_ = 'analytics'
_tablename_ = 'voice_sessions'
eventid = Integer(primary=True)
appname = String()
ctxid = Integer()
guildid = Integer()
created_at = Timestamp()
userid = Integer()
action: Column[GuildAction] = Column()
class GuiRender(RowModel):
"""
Schema
------
CREATE TABLE analytics.gui_renders(
cardname TEXT NOT NULL,
duration INTEGER NOT NULL
);
"""
_schema_ = 'analytics'
_tablename_ = 'gui_renders'
eventid = Integer(primary=True)
appname = String()
ctxid = Integer()
guildid = Integer()
created_at = Timestamp()
cardname = String()
duration = Integer()