Salesforceから取引先データをとってきてみよう、秋の日に
もうこの際、月一連載でいいのかなと思い始めている、相変わらず思考が半人前のうえピーです。
今回のネタはといいますと、*****祝***** Salesforce連携!!
ということで、有名なSalesforceさんから、弊社のAPIを呼び出してもらうだけでは申し訳ないので、
こちらからもお伺いしようと思い、私のログ収集サーバー(flentd)から、取引先データをとってこようと思います。
※ただ、何か悪い予感がするのは、喉が痛くて咳が止まらないせいなのか、、、。
不安は置いておいて、早速pluginを探して、あったらさくっと設定して、ブログも過去最短の行数で終わらせちゃお。
なーんて、淡い期待を抱きつつ、Google先生に聞いてみますと、ありました!!!
「sforce」
よっしゃー、早速インストールじゃい!!!
# /usr/sbin/td-agent-gem install fluent-plugin-sforce
おぉ、思いのほかさくっとインストールに成功、よっし。
このまま、td-agent.confにも追記じゃー、まずはファイルに取引先データを出力と。
<source> tag sforce.account type sforce username ひ・み・つ password ひ・み・つ query select id,name,Industry from account polling_interval 60 # topic AllMessages </source> <match sforce.account> type file path /tmp/sforce_account.csv </match>
それでは、サービスを再起動しましょ。うふふ、今日は久しぶりの早帰りかな。
# service td-agent restart Restarting td-agent: td-agent [失敗]
orz、嘘やろー、、、
10分ほど、思考を停止させた後、/var/log/td-agent/td-agent.logを参照いたしますと、
「2017-09-01 17:42:51 +0900 [error]: dry run failed: uninitialized constant Fluent::Input」
※うん、原因これだよね。
とりあえず、プラグインのソース見てみよう。ソースのリンクはこちら
※頭がボーっとしていたせいなのか、素直にGoogle先生に「dry run failed: uninitialized constant Fluent::Input」ってなぁにと聞かなかった私。
「おぉ、現在日付けで絞っとるやん、こりゃデータが0件だったからやな。取引先データはそんなに頻繁に登録しないし。」
※0件で落ちるって、そんな作りなわけ、あぁ、だれか止めてあげて、、、お家に帰れなくなる、、、
よっしゃー、この際、Rubyも覚えてやるわい!!
※あぁ、どつぼに嵌る予感、、、
おっし、単体テストクラス発見!!ソースのリンクはこちら
※方向性は、誤っているけど、ノウハウたまるからまぁいいか。
ここに記載しているusernameとpasswordとqueryを変更してっと
# cd /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluent-plugin-sforce-0.0.2/ # /opt/td-agent/embedded/bin/rake test
あら??エラーなし。なんで??
※ログのエラー内容を思い出して、お願いだから。
ふーむ、assert_equalでconfigの設定が正しくロード出来たかしか確認してないじゃん!!
これじゃあ、テストにならんやろ。
※おぉ、まだ脱線するのか。
うーん、でもこの作りでは、確かに単体テストでチェックできるのはconfigロードくらいかも。
そうだ!!!
confingのtopicに、testっていれると、soqlを一回だけ実行する処理に分岐するようにしちゃお。
とりあえず、取得内容を標準出力にっと。
※もう、勝手にして、、、
# in_sforce.rbより、追記した箇所抜粋 # uehara add elsif @topic == "test" th_low = DateTime.now().strftime("%Y-%m-%dT%H:%M:%S.000%Z") th_high = DateTime.now().strftime("%Y-%m-%dT%H:%M:%S.000%Z") where = "CreatedDate <= #{th_high} AND CreatedDate > #{th_low}" soql = "#{@query} WHERE #{where}" log.info "query: #{soql}" records = client.query(soql) records.each do |record| log.info "#{record}" print("#{record}") end
# cd /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluent-plugin-sforce-0.0.2/ # /opt/td-agent/embedded/bin/rake test
おぉ、データ取れてる、取れてるって?????
なんで取れるの???
※やっと気付いた、、、
教えてGoogle先生、
「dry run failed: uninitialized constant Fluent::Input」
検索、ポッチっと。
「add following line on the top of the file require ‘fluent/input’」
えっ?そうこと
# in_sforce.rbより、追記した箇所抜粋 # uehara add require 'fluent/input'
そして、
# service td-agent start td-agent td-agent: [ OK ]
やっと起動。
紆余曲折あったけど、
# vi /tmp/sforce_account.csv
???、空っぽ!!!
あぁ、直近で登録したデータがないからか、、、!!!
頻繁に登録されないデータに「flentd」使うの間違ってる!!!orz
ということで、次回「Batch版flentd、embulkでリベンジ!」をお楽しみに。