フィックスポイント コーディングテスト

python3.7.4

testlog.log 監視ログのファイルです。全ての設問に対応するためにいくつかログを追加しました。

設問1

question1.py

コード実行方法

python question1.py testlog.log

テストログ 実行結果

10.20.30.1/16 1.0
10.20.30.1/16 1.0
10.20.30.1/16 1.0
10.20.30.1/16 2.0
10.20.30.2/16 2.0
192.168.1.2/24 1.0
192.168.1.2/24 2.0
192.168.1.2/24 1.0
192.168.1.1/24 1.0
192.168.1.2/24 -

説明

  • log_list : 各ログが要素の配列
  • error_time : 故障期間(タイムアウトしたログの次のログの時刻 - タイムアウトしたログの時刻)

出力:故障期間はマイクロ秒を含むトータルの秒数です。
設問にない仕様:最後尾のログは次に ping の応答が返るまでの故障期間を算出できないので、文字列'-'で置き換えています。

設問2

question2.py

コード実行方法

python question2.py testlog.log N

N は連続回数のパラメータ

テストログ 実行結果

N=3 で実行

10.20.30.1/16 0:00:01
10.20.30.1/16 -
192.168.1.2/24 0:00:02

説明

  • each_server_logs : キーがサーバーアドバイス、バリューがそのサーバーのログの配列になった辞書
  • timeout_count : そのサーバーにおいて連続でタイムアウトした回数

設問にない仕様:サーバーごとに連続回数 N の判定を行っています。そのため出力はサーバーごとにソートされています。

設問3

設問2のコードを拡張

question3.py

コード実行方法

python question3.py testlog.log N m t

N、m、t は設問の各パラメータ

テストログ 実行結果

N=3,m=3,t=1 で実行

10.20.30.1/16 0:00:01
10.20.30.1/16 -
10.20.30.2/16 1.5
10.20.30.2/16 3.0
10.20.30.2/16 2.6666666666666665
10.20.30.2/16 3.0
192.168.1.1/24 9.333333333333334
192.168.1.2/24 0:00:02
192.168.1.2/24 5.0

説明

  • last_m_list : あるログから見て、直近 m 回のログの応答時間が要素の配列(タイムアウト('-')したログは除く)
  • return_time_avg : 直近 m 回のログの平均応答時間(last_m_list の値の合計 / last_m_list の length)

出力:サーバーアドレスと過負荷状態となっている期間(ミリ秒)を出力します。
設問にない仕様:過去 m 回の内にタイムアウト('-')が混ざっている場合はそれ以外の残りのログで計算します。(例:m=3 で、 1/3 がタイムアウトの場合は残り 2 つで平均応答時間を算出) なお、ping がタイムアウト('-')の場合は直近 m 回の平均応答時間は計算されません。(何も出力しません)

設問4

設問2のコードを拡張

question4.py

コード実行方法

python question4.py testlog.log N

N は連続回数のパラメータ

テストログ 実行結果

10.20.30.1/16 0:00:01
10.20.30.1/16 0:00:02
10.20.30.2/16 0:00:02
192.168.1.2/24 0:00:01
192.168.1.1/24 0:00:01

説明

  • each_subnet_logs : キーがネットワーク部、バリューがそのサブネットのサーバーのログの配列になった辞書
  • network_len : ネットワーク部の長さ
  • network_area : ネットワーク部に該当するアドレス