こんにちは。tigerです。
8月のことになりますが僕がPM的な立ち位置で関わっているGreenSnapという新サービスをリリースいたしました。
今回はそのときに作成したシェルスクリプトを晒しちゃいたいと思います。
はじめに
WebサービスにつきものなのがKPIですよね。
KPIはサービスの健康状態の把握や施策・機能追加/改修の成功可否の判定には欠かせません。
ですが、サービス初期はリソースが枯渇気味というのは世の常。KPI機能を作る工数も割くのももったいないです。
重要だけれども工数が…
こういう状況はよくあるんではないでしょうか。
そこで今回は工数削減のためプロダクトコードには組み込まずシェルスクリプトでKPI機能を実装することにしました。
仕様/要件
シェルスクリプトとはいえプログラムですから以下のようなシンプルでライトな仕様としました。
・同じディレクトリに存在する特定のファイルを全て読み込む
・特定の文字列を置換しクエリとしてMySQLで実行
・クエリの結果をアペンドしていきメールで通知
また構成の要件としてはざっくり以下になります。
・Linux(macでは動かないところがありました)
・mysqlコマンドがインストールされている
・mailコマンドがインストールされている
ソース
send_kpi.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#! /bin/sh # dateコマンドで前日の日付を取得し、集計開始/終了日時を設定 sum_date=`date -d "-1 days" +%Y-%m-%d` sum_date_from="$sum_date 00:00:00" sum_date_to="$sum_date 23:59:59" # dirnameとlsで同一ディレクトリから拡張子がsqlのファイル一覧を取得し繰り返し dir=`dirname $0` for sql_file in `ls $dir/*.sql` do # catでファイルの中身を読み込み、sedで"SUM_DATE_FROM"、"SUM_DATE_TO"という文字列を上記で設定したものに置換 sql=`cat $sql_file | sed -e "s/SUM_DATE_FROM/$sum_date_from/" | sed -e "s/SUM_DATE_TO/$sum_date_to/"` # mysqlコマンドで実行 エラー出力は 2>/dev/nullで捨てちゃいます result=`mysql -h mysql_host -u mysql_user -pmysql_password -D database_name --default-character-set utf8 -e"$sql" 2>/dev/null` # クエリの結果を改行してアペンド content="$content\n\n$result" done # echo -eで改行を有効にし、mailコマンドでメール送信 echo -e "$content" | mail -s "Subject $sum_date" "hoge@hoge.com" |
sample.sql(同じディレクトリに配置)
1 2 3 |
SELECT 'SUM_DATE_FROM' `集計開始日時`, 'SUM_DATE_TO' `集計終了日時` |
まとめ
あとはSQLを書いて同一ディレクトリに配置していけば項目が増やせるので、項目の増減があっても楽チンです!
送信されたKPIは手動でExcelか何かに転記する必要はありますが、まあ初期としては十分だと思います。
何かのご参考なれば幸いです。
以上となりますが、アライドアーキテクツではエンジニアを随時募集しております。
少しでも興味ある方はぜひこちらの採用サイトまで。
最近ではコードを書く機会がめっきり減って来てプログラマー35歳限界説に恐怖しています。 このブログを口実に無理矢理新しい技術に触れていきたいと思っています。