🚨

サーバーへのアクセスを LED に反映する

2022/12/30に公開


赤:POST 緑:GET

Arduino側

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
}

uint64_t r_count = 0;
uint64_t g_count = 0;

void loop() {
  char ch = Serial.read();

  if (ch == 'R') {
    r_count = 0;
  }
  if (r_count == 0) {
    digitalWrite(2, HIGH);
  }
  if (r_count == 60 * 0.25) {
    digitalWrite(2, LOW);
  }
  r_count++;

  if (ch == 'G') {
    g_count = 0;
  }
  if (g_count == 0) {
    digitalWrite(3, HIGH);
  }
  if (g_count == 60 * 0.25) {
    digitalWrite(3, LOW);
  }
  g_count++;

  delay(1000 / 60);
}
  • 'R' を受信したら赤の LED を 0.25 秒間点灯す (緑も同様)
  • Arduino IDE で 'R' や 'G' を送って正しく動いていれば次へ

PC側

require "serialport"
require "open3"

SerialPort.open("/dev/cu.usbmodem1414401", 9600) do |sp|
  Open3.popen3("ssh xxx tailf /var/log/nginx/access.log") do |_stdin, stdout, _stderr, _thread|
    loop do
      s = stdout.gets
      if s.match?(/GET/)
        sp.write("G")
      end
      if s.match?(/POST/)
        sp.write("R")
      end
    end
  end
end
  • SSH でログをひっぱってくる
  • 仮に GET なら 'G' で POST なら 'R' を Arduino に送る

応用してできそうなこと

  • 青LEDを追加して何かの監視に割り当てる
  • 5xx のときだけ赤LEDをしばらく灯す
  • 5xx なら圧電スピーカーを鳴らす
  • 特定のパスにアクセスされたときだけアラートする
  • フルカラーLEDを追加して紫なども監視に割り当てる
  • デプロイ中だけアラートする
  • RSpec でのテストの状況を反映する

Discussion