Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/walkure/freqwatch
電源周波数観測ソフトウェア
https://github.com/walkure/freqwatch
Last synced: 4 days ago
JSON representation
電源周波数観測ソフトウェア
- Host: GitHub
- URL: https://github.com/walkure/freqwatch
- Owner: walkure
- Created: 2022-02-20T16:32:41.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2023-11-07T16:08:09.000Z (about 1 year ago)
- Last Synced: 2024-12-23T15:48:19.348Z (13 days ago)
- Language: Go
- Homepage: https://www2.hatenadiary.jp/entry/2022/04/12/freqWatch
- Size: 85 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# freqWatch
周波数観測情報を受信してリアルタイムに表示する試みです。
## build
receiverディレクトリに移動して ``` go build ```
## configuration
環境変数から取ってきます。
- PORT: HTTPを受けるポート (default=`8080`)
- LISTEN: HTTPを受けるホストアドレス (default=`""` INADDR_ANY相当)
- RECV_PATH: ESP32等から周波数情報をを受けるパス (default=`/frecv`)
- SHARE_KEY: ESP32等から周波数情報を受けるときの共通キー (必須)
- METRICS_PATH: OpenMetrics Exporterのパス (default=`/metrics`)
- DUMP_BUFFER: 初回表示時に送るデータポイント数(default=60*10)
- METRIC_BUFFER: OpenMetrics Exporterで処理するデータポイント数(default=30)### nginx
https通信する場合はnginxのようなリバプロを表に置きます(Let's Encrypt使うとか考えるとそのほうが楽)。
ESP32でTLS通信はちょっと大変なので、データ送信だけhttpで受ける場合の設定例。
```nginx
# http
server{
listen 80;
listen [::]:80;location /reciverPath/ {
proxy_pass http://127.0.0.1:8080/frecv?$args;
}
}# https
server{
listen 443;
listen [::]:443;
location /freqWatch/ {
root /var/www/;
}location /freqWatch/d/ {
if ( $uri = '/freqWatch/d/frecv' ){
return 404;
}
if ( $uri = '/freqWatch/d/metrics' ){
return 404;
}
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080/;
}
}
```### systemd
きょうびdaemonはsystemdで管理するので、Unit fileを雑に書く。
```systemd
[Unit]
Description=freq receiver
After=network-online.target nginx.service[Service]
User=nobody
ExecStart=/usr/local/bin/freq_recv
Environment=SHARE_KEY=fds998fsdfscjdje
Restart=always
RestartSec=30s[Install]
WantedBy=multi-user.target
```### Prometheus a.k.a OpenMetrics
`http://localhost:8080/metrics` で OpenMetrics Exporterが動いています。
中長期のデータはPrometheusのようなもので取っておくほうが楽です。実際にスクレイピングさせると`Error on ingesting out-of-order samples` というwarnログがもりもり流れるので、
取得済みデータを再度取得しないようにクエリパラメタ`flush`をつけてください。Prometheusの場合は以下の設定を`promethues.yml`の`scrape_configs`内`job`に追加します。```yaml
params:
flush: [true]
```1秒単位のデータは情報量が多すぎるのでまとめる、というときはクエリパラメタ`mode=average`をつけると平均値を返すようになります(こちらには`flush`はありません)。
```yaml
params:
mode: ['average']
```このとき、平均は`METRIC_BUFFER`に保存されているデータで取るので、スクレイピング間隔などに合わせて適宜調整すると良いでしょう。