〜2016年3月上旬〜
curlで取ってきてawkで抜き出して、twitterへポストするだけなので適当に用意。
後はIFTTTのDate&Timeで1時間毎にWerckerのWebhookを叩けばいいだけ。
最初は順調だったが、なぜかDate&Timeが不調で数時間置きになったり。
まあでもログがしっかり残るので原因は特定しやすいし、
エラーになればメールも飛んでくるし、リトライもできるしで、
bot環境としてはかなりいいと思う。
いやーこんなものがあろうとは。
Monitor Website Latency using CloudWatch Logs CLI Plugin - AWS DevOps Blog - Amazon Web Services
これを入れるとaws logs pushとaws logs pullが使えるようになる。
エージェントのコマンドライン版というかエージェントは内部でこれを使ってるんだと思うが、
パイプで渡せるので非常に重宝する。
% seq 1000 | aws logs push --log-group-name group --log-stream-name seq
とするだけでCloudWatch Logsに送れる。また、
% aws logs pull --follow --log-group-name group --log-stream-name seq
でtail -f的な使い方が可能になる。
Google ChromeがなぜかSSL接続エラーでログインできない。
Chromeを上げるかと思ったが、そういえばUbuntuにはChromeがなくて
本家から取ってきていたことに気づいた。ああ、だから古いのか。
というわけでまた本家からdebを取ってきた。
でもPPAを追加したはずなんだけどな。
たまに抜ける原因が2つあることがわかった。
IFTTTのDate&Timeは毎時15分という設定してるが、これがたまに発火しないときがある。
それとtenki.jp側が15分だとまだ更新してないときがある。
後者はちょっと時間を置いてretryすればいけそうだが、たまに発火しないのはこまるなあ。
なんか別にそんなサービスがあるといいんだが。
man curlしてたら面白いオプションを見つけた。
--libcurl <file> Append this option to any ordinary curl command line, and you will get a libcurl-using C source code written to the file that does the equivalent of what your command-line operation does! If this option is used several times, the last given file name will be used. (Added in 7.16.1)
Cのソースコードを吐くらしい。
% curl -s google.com <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="https://www.google.co.jp/?gfe_rd=cr&ei=xlvcVtH2E-X98wfoqb74DQ">here</A>. </BODY></HTML> % curl -s -o /dev/null --libcurl - google.com | tee google.c /********* Sample code generated by the curl command line tool ********** * All curl_easy_setopt() options are documented at: * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html ************************************************************************/ #include <curl/curl.h> int main(int argc, char *argv[]) { CURLcode ret; CURL *hnd; hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_URL, "google.com"); curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.43.0"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L); curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); /* Here is a list of options the curl code used that cannot get generated as source easily. You may select to either not use them or implement them yourself. CURLOPT_WRITEDATA set to a objectpointer CURLOPT_WRITEFUNCTION set to a functionpointer CURLOPT_READDATA set to a objectpointer CURLOPT_READFUNCTION set to a functionpointer CURLOPT_SEEKDATA set to a objectpointer CURLOPT_SEEKFUNCTION set to a functionpointer CURLOPT_ERRORBUFFER set to a objectpointer CURLOPT_STDERR set to a objectpointer CURLOPT_HEADERFUNCTION set to a functionpointer CURLOPT_HEADERDATA set to a objectpointer */ ret = curl_easy_perform(hnd); curl_easy_cleanup(hnd); hnd = NULL; return (int)ret; } /**** End of sample code ****/ % gcc google.c -lcurl % ./a.out <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="https://www.google.co.jp/?gfe_rd=cr&ei=5VvcVqqVCOH98weM0L6AAQ">here</A>. </BODY></HTML>
これはなかなか楽しい。
-Lオプションをつけたらちゃんとそれに相当するコードも追加される。
% diff -U1 google{,1}.c --- google.c 2016-03-07 01:33:22.179676872 +0900 +++ google1.c 2016-03-07 01:38:05.817188787 +0900 @@ -14,2 +14,3 @@ curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(hnd, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.43.0");
これを静的にリンクすれば持ち運び便利かもと思ったが、
依存するライブラリの数が多すぎてなんかでかくなりそう。
% ldd a.out | wc -l 39
もうすっかり:15固定と思い込んでいたからretryするしかないなと修正始めたが、
ふとIFTTTのレシピを見直したら15分置きに設定できると書いてあった。
まあ、そうだよなあ。:15なんて半端な時刻だけってのも変だし。
32bit版はProgram Files (x86)にインストールされていたが、
64bit版はProgram Filesにインストールされるので共存可能。
まあ、すぐ32版は消しちゃったので本当に共存可能だったのかどうかわかんけど。
出た当初は64bit版もなぜか(x86)にインストールされてたようで。でもこれはバグっぽい。
設定や拡張やら全部元のprofileを使うようで全然問題ない。
about:supportでユーザエージェントを確認する。
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0
Win64; x64となっていればok。
ふとThunderbirdはどうだっけと確認してみるとすでに64bitだった。
こっちはいつからだったか思い出せない。
stdoutがttyじゃないとbufferingするコマンドは多いがして欲しくないときがある。
たとえばログにNULが入っているのでそれを取り除きながらCloudWatch Logsに送りたいなんてときは、
% tail -f foo.log | tr -d '\0' | aws logs push ...
とすればよさげだが、これではtrがbufferingしてしまっていつまで経ってもpushされない。
ある程度のサイズがたまれば吐き出されるんだろうけど、すぐに見たい場合に困る。
そこでstdbufだ。これでstdoutをline bufferモードにしてあげれば1行単位で反映される。
使い方も簡単で
% tail -f foo.log | stdbuf -oL tr -d '\0' | aws logs push ...
とするだけでいい。-o0にすれば完全にunbuffer modeになるがそこまですると効率が悪そう。
Chromeが上がったはいいがなぜかsmooth scrollになってしまっていやな感じ。
Firefoxもそうだけどなんでそっちをdefaultにするのか。
設定見ても出てこないし、じゃあ後はchrome://flagsぐらいかと確認したらあった。
というわけで
滑らかなスクロールを無効にして再起動すればok。