john
2021.05.25
Edison版SotaのWebHook機能の有無についてご教授ください。
Sotaサポート様
いつもお世話になっております。
お手数をおかけしますが、ご回答宜しくお願い致します。

以上、何卒宜しくお願い致します。


★0.質問
Edison版Sotaにおいて、システムのイベントを拾うwebhook機能が標準で提供されているかいないか

★1.質問経緯
業務の都合上、Sota内部の特定のシステムイベントを拾い、外部サーバへそのイベントを通知するような仕組みが必要です。
そして、その結果を運用チームにslack・chatwork等に通知するような監視システムを考えています。
弊社で独自実装する事も検討しましたが、まずはvstone様側が上記のような仕組みを標準提供しているかを確認するべきという運びになりまして、今回の質問に至りました。

★2.なぜ必要か
・Sotaの安定運用のため。

★3.対象のイベント一覧
以下、対象のイベントです。
/*********************************************************************
・Sota内のディスク容量が設定した基準値を超えたというイベント
・SotaのCPU利用率が設定した基準値を超えたというイベント
・Sota内の電源ボタンが押下されたというイベント
・Sotaがオンラインからオフライン状態になったというイベント
・Sotaの電源ONからOFF状態になったというイベント
**********************************************************************/

★4.備考
他にベストプラクティス・良案あれば、簡単でいいのでご教授ください。
知見を持っている方がいらっしゃれば、コメントお願い致します。
回答
Sotaサポート
2021.05.26
john様

お世話になっております。Sotaサポートです。

webhookに関する機能はSotaには特に搭載されておりません。
実現する場合は、デベロッパ側で独自に実装していただく必要があります。

実装方法については、弊社で実装した実例がないため、詳細はお答えいたしかねますが、例えばJava等でwebhookの実装例が多数公開されているため、それらを参考に枠組みを作成し、Sota内のステータス取得はシェルコマンドを実行してステータスを取得するような方法になるかと思われます。
ただし、ボタン入力等一部のSotaのステータス取得についてはOSのコマンドでは確認出来ないかと思われます。
journalctlコマンドでログをリアルタイムにモニタリングし、まずは目視でそれぞれのステータス変化に発生するメッセージパターンを把握したうえで、コード上でそれらを正規表現で検知すると言った仕組みが想定されます。
john
2021.05.29
Sotaサポート様
いつもお世話になっております。
ご回答ありがとうございました。

webhook機能は、現在標準提供されていない旨承知いたしました。
上記機能自体は、javaでの実装自体は容易だと思います。
ただ独自実装だと管理工数が増えます。
従って、開発元が提供している機能を使用したく、今回の問い合わせに至った次第です。

以下、今回のやり取りを踏まえ要望を提案させて頂きます。
可能であれば、次期開発予定のSota端末に、システムのイベントを拾うようなインターフェースを提供してほしいです。webhookやpush通知機能などの本格的な運用を想定した機能です。
Sotaは確かに素晴らしいソリューションだと思いますが、本番運用を想定した機能が不足しているように思います。ぜひとも積極的な検討をして頂けないでしょうか。ほかにも提案したい機能があるのですが、まずはwebhookから提案させていただきます。。

引き続きよろしくお願いいたします。
以上、何卒宜しくお願い致します。
                                                開発チーム/岸本




/***
追記
/****
Sota端末のボタンのON・OFFのイベントですが、普通に実現できました。
vstone様の技術者様であればすでに把握されているかと思いますが、共有いたします。
弊社で検証した結果以下の通りです。

・ボタンONにしたイベント
以下でイベントを拾い、外部サーバに通知を送信することに成功しました。
https://www.atmarkit.co.jp/flinux/rensai/linuxtips/a029crontabstartup.html

・ボタンOFFにしたイベント
systemdで、shutdownに依存させたunitを作成、カスタムした常駐プロセスを動作させます。
電源offイベントにフックし、外部APIサーバにhttp電文を送信するスクリプトを実行させます。
結果、外部APIサーバのエンドポイントにpostされます。
post時には、bodyにシリアル番号などのユニークキー等を載せるようにすれば、どのsota端末から送信されたのかも特定可能です。これで数十台規模のsota端末管理も可能です。

ファイル=sota.shutdownhook.service
#################################
[Unit]
Description=Vstone SotaDevice shutdown Hook
Before=shutdown.target
DefaultDependencies=no
 
[Service]
Type=oneshot
ExecStart=/home/root/curl_post_external_server.sh
RemainAfterExit=yes
 
[Install]
WantedBy=shutdown.target
################################
john
2021.05.29
ボタンOFFにしたイベントのブックマーク

参考文献
https://kernhack.hatenablog.com/entry/2014/12/08/000708
https://armadillo.atmark-techno.com/forum/armadillo/3900
Sotaサポート
2021.05.31
john様

お世話になっております。Sotaサポートです。

お寄せいただいたwebhookのSota次世代版への組み込みですが、ご意見として参考にさせていただきますが、実現の可否につきましてはおそらく難しいものと思われます。

実装の際には、「安定性が確保できるか」「デベロッパ全体に対して有用であるか」「弊社の実装コストに見合うか」といった視点での判断となるため、結果として実装しない、または実装したとしてもご希望の仕様から大きくかけ離れたものになる可能性があります。

何卒宜しくお願い致します。
john
2021.06.01
Sotaサポート様
Sota技術部様
お世話になっております。

ご返信ありがとうございます。
おおむね、webhook機能は実装しない方針であると理解しました。
実装可否の判断基準のご提示、ありがとうございました。
確かに、こちらの一方的な要望で話を進めようとし申し訳ございませんでした。


最後に以下の点だけ確認させて下さい。
もし仮にディベロッパー側で機能追加要望があれば、こちらのコミュニティで追加すればいいでしょうか。それとも、別の窓口に連絡した方がいいのでしょうか。
現状、機能追加要望は特段受付けていないのであれば、その旨ご指摘下さい。

以上、何卒宜しくお願い致します。
                                              開発チーム/岸本
john
2021.06.01
/*日本語がおかしかったので、再投稿します。。*/



Sotaサポート様
Sota技術部様
お世話になっております。

ご返信ありがとうございます。
実現可否についての判断基準のご提示、ありがとうございました。
おおむね、webhook機能は実装しない方針であると理解しました。
こちらの一方的な要望で話を進めようとし申し訳ございませんでした。


最後に以下の点だけ確認させて下さい。
要望の仕方についてです。
もし仮にディベロッパー側で機能追加要望があれば、こちらのコミュニティで要望を提示すればいいでしょうか。
それとも、別の窓口に連絡した方がいいのでしょうか。
現状、機能追加要望は特段受付けないのであれば、その旨ご提示下さい。

以上、何卒宜しくお願い致します。
                                              開発チーム/岸本
Sotaサポート
2021.06.01
john様

機能追加の要望につきましては、本フォーラム・問い合わせメールフォーム等いずれの経路でお寄せいただいても承ります。
ただ、先にご説明いたしました通り、有益性や実装コスト等の観点で、個別にご希望いただいた要望につきましては、どうしてもお応えしづらい事情があります。

何卒宜しくお願い致します。
john
2021.06.02
Sotaサポート様
Sota技術部様
お世話になっております。

承知致しました。
このフォーラムにて、引き続き機能追加提案があればissueを上げさせていただきます。
スレッド長々と引き延ばし、お手数をおかけしました。
ありがとうございます、助かりました。

以上、何卒宜しくお願い致します。
john
2021.06.02
全Sotaディベロッパ様へ共有

シャットダウンイベントを拾い、外部通知する仕組みを共有します。
有料級の情報ですが、Sotaディベロッパーの公益のため、あえて公開致しました。
ただVstone様公式の手段ではないので、自己責任でお願い致します。
何か不具合発生が発生しても責任は取りかねますので、予めご了承ください

(※弊社ではうまくいっただけなので、ほかの環境では失敗する恐れもあります)


#0.bashスクリプトのダウンロード
以下をcurl_post_external_server.shとし、/home/root/に配置してください。
rootログインされているかと思いますので、特段パーミッション変更は不要です。

########################################################
#!/bin/bash
#/home/root/curl_post_external_server.sh
echo " -- START -- "

#########################################
#server config
#you must create api endpoit for watching the sota device status
#########################################
base="https://external.mine.service"
endpoit=/device/robot/info
url=${base}${endpoint}

################
#get http body
################
#sota serial number
device_id="$1"

if [ "${device_id}" = "" ] ;then
    device_id="unkwon"
fi

now=$(date "+%Y%m%d-%H%M%S")
data="sota device was shutdowned. the eventhook done. datetime: ${now}"

echo "-- GET VALUES --"

###################
#send post request
###################
curl -X POST -d  '{"id": ${device_id}, "content": "${data}"}' ${url}
echo " -- END -- "
########################################################



#1.サービスファイル作成
# 以下をそのまま実行してください。
cat < [Unit]
Description=Vstone SotaDevice shutdown Hook
Before=shutdown.target
DefaultDependencies=no
 
[Service]
Type=oneshot
ExecStart=/home/root/curl_post_external_server.sh
RemainAfterExit=yes
 
[Install]
WantedBy=shutdown.target
EOF

#2. 自動起動設定
systemctl daemon-reload
systemctl enable sota.shutdownhook.service

#3. シャットダウンイベントフック起動
systemctl start sota.shutdownhook.service

#4. シャットダウンイベントフック状態確認
systemctl status sota.shutdownhook.service

・備考
コンソールログは、journalctlを用いて参照して下さい。
多分普通にご存知だと思いますが、補足しておきます。
まあ、開発者なら普通に知っているレベルよねw

#ログ参照
journalctl -u sota.shutdownhook.service


以上です。
ご精読ありがとうございました。
john
2021.06.02
誤記がありました。
該当箇所だけ訂正致します。
失礼いたしました。


(誤):
#1.サービスファイル作成
# 以下をそのまま実行してください。
cat < [Unit]
Description=Vstone SotaDevice shutdown Hook
Before=shutdown.target
DefaultDependencies=no
 
[Service]
Type=oneshot
ExecStart=/home/root/curl_post_external_server.sh
RemainAfterExit=yes
 
[Install]
WantedBy=shutdown.target
EOF

-----------------------------------------------------------------------------------------

(正):
#1.サービスファイル作成
# 以下をそのまま実行してください。
cat &lt;&lt;EOF /etc/systemd/system/sota.shutdownhook.service
[Unit]
Description=Vstone SotaDevice shutdown Hook
Before=shutdown.target
DefaultDependencies=no
 
[Service]
Type=oneshot
ExecStart=/home/root/curl_post_external_server.sh
RemainAfterExit=yes
 
[Install]
WantedBy=shutdown.target
EOF
john
2021.06.02
誤記がありました。
該当箇所だけ訂正致します。
失礼いたしました。


(誤):
#1.サービスファイル作成
# 以下をそのまま実行してください。
cat < Description=Vstone SotaDevice shutdown Hook
Before=shutdown.target
DefaultDependencies=no
 
[Service]
Type=oneshot
ExecStart=/home/root/curl_post_external_server.sh
RemainAfterExit=yes
 
[Install]
WantedBy=shutdown.target
EOF

-----------------------------------------------------------------------------------------

(正):
#1.サービスファイル作成
# 以下をそのまま実行してください。
cat <<< [Unit]
Description=Vstone SotaDevice shutdown Hook
Before=shutdown.target
DefaultDependencies=no
 
[Service]
Type=oneshot
ExecStart=/home/root/curl_post_external_server.sh
RemainAfterExit=yes
 
[Install]
WantedBy=shutdown.target
EOF
john
2021.06.02
とにかく以下のファイル作成すればOKです。。。


ファイルパス=/etc/systemd/system/sota.shutdownhook.service
[Unit]
Description=Vstone SotaDevice shutdown Hook
Before=shutdown.target
DefaultDependencies=no
 
[Service]
Type=oneshot
ExecStart=/home/root/curl_post_external_server.sh
RemainAfterExit=yes
 
[Install]
WantedBy=shutdown.target
EOF
john
2021.06.10
#サービスファイル作成
vi /etc/systemd/system/sota.shutdownhook.service

[Unit]
Description=Vstone SotaDevice shutdown Hook
Before=shutdown.target
DefaultDependencies=no
 
[Service]
Type=oneshot
ExecStart=/home/root/curl_post_external_server.sh
RemainAfterExit=yes
 
[Install]
WantedBy=shutdown.target
この質問に回答する
 

Page Top