日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

PHPのプロファイリングが出来るblackfireでPOSTリクエストもプロファイルする

以前blackfireを試したんですが、そのときはブラウザでページを開いて、
chrome extentionでプロファイリングしてました。
なのでGET以外のリクエストがプロファイルやりづらく、
もうちょっといいやり方無いかなと思って探してみました。

以前の話
arata.hatenadiary.com

やることはblackfire agentをどこかにインストールして、そこからcurlコマンドで計測するという感じです。
今回自分はMacでやったのでbrewで入れました。
インストール手順はこのあたりです。
configのid, tokenとサーバに設定するid, tokenは異なるので注意が必要です。
blackfire.io

実際にやってみるとこんな感じでした。

$blackfire config
--------------------------------------------------------------
 Welcome to the Blackfire CLI utility configuration assistant
--------------------------------------------------------------

Your Blackfire Client ID and Token are available at:
https://blackfire.io/my/settings/credentials#client

Enter your Client ID: XXX
Enter your Client Token: YYY
------------------------------------------------------------------------------
The following configuration has been updated successfully
/path/to/.blackfire.ini

Thank you for using Blackfire
------------------------------------------------------------------------------

サーバの実装として使ったレポジトリはこちら

github.com

blackfireはcurlコマンドをwrapしてくれるみたいです。
curlでのリクエストを取れればいいんですけど、そんなときに便利なのがchromeのdev toolですね。
こんな感じでリクエストをコピーしてきます。

実際blackfireでcurlをwrapして叩いてみました。
GraphのURLはごまかしてます。

# 対象のserver起動
$make compose id=xxx token=yyy                                                                         [master]@(blackfire-with-slim)
docker-compose build
Building web
Step 1/10 : FROM php:7.1.10
 ---> c342f917459a
Step 2/10 : RUN apt-get update
 ---> Using cache
 ---> 8f08514cd607
Step 3/10 : RUN apt-get install -y wget
 ---> Using cache
 ---> 558f46f226ce
Step 4/10 : RUN wget -O - https://packagecloud.io/gpg.key | apt-key add -
 ---> Using cache
 ---> dc02abcab12c
Step 5/10 : RUN echo "deb http://packages.blackfire.io/debian any main" | tee /etc/apt/sources.list.d/blackfire.list
 ---> Using cache
 ---> 947920d5728f
Step 6/10 : RUN apt-get update
 ---> Using cache
 ---> 98aa1854625d
Step 7/10 : RUN apt-get install -y blackfire-agent
 ---> Using cache
 ---> d0725ad5b875
Step 8/10 : COPY ./blackfire.ini /etc/blackfire/agent
 ---> Using cache
 ---> 9a8965d48d25
Step 9/10 : RUN /etc/init.d/blackfire-agent restart
 ---> Using cache
 ---> f6360b5dc8d4
Step 10/10 : RUN apt-get install blackfire-php
 ---> Using cache
 ---> 40f8638aca26
Successfully built 40f8638aca26
Successfully tagged blackfire-with-slim_web:latest
docker-compose up
Starting blackfire-with-slim_web_1 ... done
Attaching to blackfire-with-slim_web_1
web_1  | make: Entering directory '/opt/app'
web_1  | /etc/init.d/blackfire-agent start
web_1  | Starting Blackfire Agent: blackfire-agent.
web_1  | /usr/local/bin/php -S 0.0.0.0:8080 -t web

# 別ターミナルで実行してみます
$ blackfire curl 'http://localhost:8080/hey' -H 'Origin: http://localhost:8080' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' -H 'Content-Type: application/json' -H 'Accept: */*' -H 'Referer: http://localhost:8080/' -H 'Connection: keep-alive' --data-binary '{"name":"blackfire"}' --compressed
Profiling: [########################################] 10/10
Blackfire cURL completed
Graph URL https://blackfire.io/profiles/XXXXXXX/graph
No tests! Create some now https://blackfire.io/docs/cookbooks/tests
No recommendations

Wall Time     126ms
I/O Wait        n/a
CPU Time        n/a
Memory          1MB
Network         n/a     n/a     n/a
SQL             n/a     n/a

Graph URLで表示されているURLにアクセスするとこんなグラフが見れました。

POSTもラクラクプロファイルできて便利!