rewrite: Analytics client-server model.
This commit is contained in:
186
bot/analytics/data.py
Normal file
186
bot/analytics/data.py
Normal 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()
|
||||
Reference in New Issue
Block a user