見出し画像

Slack過去ログ対策

入江開発室ではサロン内のやりとりをSlackで行っています。
Slackの場合、メッセージの上限が1万件という課題があります。

以前、その課題を解決するために、GAEを利用して解決しようとしました。


定期的にジョブを実行し、Slackのログを取得するのはスムーズにできました。

ですが、Slackのログをzipで取得したデータを取り込む際にいくつか問題があったので、まとめておきます。
(エラーのハードコピーを取っておけば良かった。。。)

1.メモリ不足
GAEではデフォルトのメモリサイズは256MBのようです。zipファイルが9MBしかなかったので、油断していました。実際にファイルを展開すると300MB近くになりました。
<解決策>
GAEでは、app.yamlの設定を変更するだけでスペックを上げることができます。instance_classにF4を指定してすると実行することができました。

instance_class: F4

2.時間切れ
メモリ不足は解消されたので、順調に動いていましたが、しばらくするとエラーとなります。何回か実行しても約10分後にエラーになってしまいます。調べてみると、GAEでは1リクエストは10分以下に抑える必要があるらしいです。
<解決策>
実行時間を減らすために、zipファイルを分割して実行しました。

slackのアーカイブのフォルダ構造は次のようになっています。
 チャンネル名1/2018-06-26.json 
         /2018-06-27.json
 チャンネル名2/2018-06-26.json
 チャンネル名3/2018-06-27.json
 users.json
 channels.json
 integration_logs.json

容量の大きいチャンネルを分割し、新たにzipファイルを作成し順番に取り込むようにしました。
(インスタンスの設定はもとに戻しました)

3.取り込めない
メモリ不足も時間切れも解決し、取り込みのジョブはエラーなく実行されました。でも、肝心のメッセージの一部が取り込まれていません。

ここでずいぶん悩んだのですが、原因がわかりました。

<原因>
windowsのフォルダ名、ファイル名はShift-JISでエンコードされているようです。GAEはUTF-8でエンコードされるため、チャンネル名の判定ができずメッセージが取り込めていませんでした。
(2.の作業が原因でした。。。)

<解決>
7-zipで圧縮をしていたのですが、UTF-8で圧縮するオプションを使用してzipファイルを作成するようにしました。

---

ようやく過去ログを取り込めるようになったので、次はSlack認証を実装します!


この記事が気に入ったらサポートをしてみませんか?