インターフェース ================ .. mermaid:: flowchart TB event(event handler); m1[["MessageParser(data)"]]; event --> m1 --> d["dispatcher()"] --> f1 & f2 & f3; subgraph f1[Sub command] direction TB c([command]) --> sc1 & sc2 & sc3 & sc4 & sc5; sc1(results) --> cp1[[CommandParser]] --> p1(aggregation); sc2(graph) --> cp2[[CommandParser]] --> p2(aggregation); sc3(ranking) --> cp3[[CommandParser]] --> p3(aggregation); sc4(report) --> cp4[[CommandParser]] --> p4(aggregation); sc5(help) --> cp5[[CommandParser]] --> p5(text generation); p1 & p2 & p3 & p4 & p5 --> mp1[["MessageParser(post)
MessageParser(status)"]]; end subgraph f2[Results record] direction TB r2([record]); r2 --> a1(score) --> results[(results)]; r2 --> a2(remark) --> remarks[(remarks)]; results & remarks --> pp2["post_processing()"] --> mp2[["MessageParser(post)
MessageParser(status)"]]; end subgraph f3[Member management] direction TB r1([registry]); r1 --> a4(team) --> db2[(team)] & db1; r1 --> a3(member) --> db1[(member)] & db3[(alias)]; r1 --> a5(alias) --> db3; db1 & db2 & db3 --> mp3[["MessageParser(post)
MessageParser(status)"]]; end f1 & f2 & f3 --> post["post()
(API Interface)"]; .. --- config: flowchart: curve: linear --- アダプタ ======== | アプリ起動時に指定されたサービスのアダプタが設定される。 | アダプタは以下のクラスを含む抽象化されたクラスである。 - IntegrationsConfig - APIInterface - FunctionsInterface - MessageParser .. admonition:: 関係図 :collapsible: closed .. mermaid:: classDiagram class ServiceAdapter ServiceAdapter : interface_type ServiceAdapter --* IntegrationsConfig ServiceAdapter --* APIInterface ServiceAdapter --* FunctionsInterface ServiceAdapter --* MessageParser class IntegrationsConfig IntegrationsConfig : config_file IntegrationsConfig : slash_command IntegrationsConfig : badge_degree IntegrationsConfig : badge_status IntegrationsConfig : badge_grade IntegrationsConfig : plotting_backend IntegrationsConfig : read_file() class APIInterface APIInterface : post() class FunctionsInterface FunctionsInterface : post_processing() FunctionsInterface : get_conversations() class MessageParser MessageParser : data MessageParser : post MessageParser : status MessageParser : parser() class MessageParserDataMixin MessageParserDataMixin <|-- MessageParser MessageParserDataMixin : data MessageParserDataMixin : post MessageParserDataMixin : status MessageParserDataMixin : reset() MessageParserDataMixin : get_remarks() IntegrationsConfig ------------------ | 指定サービスのみで利用する設定値を保存する。 | 設定値は設定ファイルのサービス名と同じセクションに記述する。 APIInterface ------------ | 指定サービスに対して出力を行う。 | 出力する内容は ``MessageParser`` の ``post`` データクラスが保持している。 FunctionsInterface ------------------ | 指定サービスに対するサービス専用の関数群。 | ``APIInterface`` 、 ``MessageParser`` から利用される。 MessageParser ------------- | MessageParserは指定サービスから入力されたテキストデータをコマンドと引数に分ける役割を担う。 | 状態を保持するためのデータクラスを3つ持つ。 - data - post - status data 入力されたテキストデータの情報を保持する。 - 入力テキスト - イベント発生タイムスタンプ - その他 post 各機能で集計した結果など、出力するデータを保持する。 - 集計結果 - 生成ファイル - メッセージデータ - 集計期間などの補助情報 - その他 status 各機能の最終的なステータス情報を保持する。 - DBに対する操作 - 更新したデータの状態 - 矛盾したデータで更新した、など - 処理結果 - その他 ディスパッチャー ================ | 各機能はディスパッチテーブルから呼び出される。 | 呼び出される機能は ``MessageParser`` を引数に取る。必要な情報は ``data`` データクラスから取得する。 | 呼び出された機能はそれぞれ必要な処理を実施し、結果を ``post`` データクラスと ``status`` データクラスに保存する。 | サービス単位で後処理があるものは ``FunctionsInterface`` の ``post_processing()`` で処理する。 ロギング ======== デバッグ/メンテナンス用のログレベルの定義 .. list-table:: :width: 100% :widths: 10 10 40 40 :header-rows: 1 * - facility - log level - 出力時の意味付け - 備考 * - TRACE - 5 - 処理の遷移などを表示 - カスタムログレベル * - DEBUG - 10 - 各処理に必要なパラメータの表示、処理結果の表示 - * - INFO - 20 - 各処理の状態を表示 - 通常ログ * - WARNING - 30 - 想定通りの処理結果にならなかったが、動作に影響ないエラー - * - ERROR - 40 - 想定通りの処理結果になっておらず、テータに矛盾が生じた可能性がある状態 - データ修正が必要なエラー * - CRITICAL - 50 - 動作を続けるとデータ破壊などが発生しうる状態 - ``exit()`` させる