kintone縛りでURL監視システムを構築する
kintoneにできるだけ処理をよせてURL監視(http/https)システムが作れるか試してみました。kintoneのお試しで無理やり作ってみたので本当にURL監視したい場合はpingdomやsite24x7などを使うのが良いかと思います。
ソースコード
https://github.com/isotai/url_monitoring_by_kintone
機能
- 15分に1回ポーリング
- URLごとに監視するか、中止するか設定できる
- URLごとにしきい値をつけられる(連続n回失敗したらアラートする)
- URLごとにしきい値を超えた場合にアラートするか決められる
処理フロー
kintoneアプリ
「url_monitoring_resorce」アプリがユーザーが監視対象のURLやしきい値を入力するアプリです。
「url_monitoring_alarm」はURL監視の失敗回数を記録するアプリです。「url_monitoring_resorce」でレコードを登録した際に自動的に「url_monitoring_alarm」のレコードが作成されます。
「url_monitoring_result」は監視結果を登録するアプリです。
「[開くの禁止]monitoring_定期実行」にレコードはなく、本アプリを開いた時にURLへの監視がキックされるようにしています。監視機能をkintoneのJavaScriptのカスタマイズ機能で実装しているので処理を実行するためにはアプリにアクセスしてJavaScriptを実行する必要があります、そのため監視キック用のアプリを作成しています。監視は別サーバーで実行して、結果をkintoneに登録するのが楽そうですがkintone縛りでやっているので、監視もkintoneで実装します。。
- kintoneにプライマリーキー、外部キーを設定することはできないので、上記図の[PK][FK]はそうしたい気持ちです。
ポイント
定期実行
kintone側に実装した監視処理を定期実行したかったのですが、kintone側にはcronのような定期実行を設定できる機能がない、作成した関数をAPIとして公開するようなこともできないようでした。そのためkintoneのevent処理 (JavaScriptのイベントリスナーの様な機能)を利用して監視処理を実行する必要があります。今回は苦肉の策として、「[開くの禁止]monitoring_定期実行」アプリの一覧画面表示イベントで監視処理を実行するように設定。別サーバーでヘッドレスブラウザーを使用して定期的に「[開くの禁止]monitoring_定期実行」へアクセスして処理をキックするように設計しました。kintone縛りしたかったのですが、定期実行をキックする部分のみkintoneだけでは実現できず...
具体的にはpuppeteerというHeadless Chrome使うのを便利にするNode ライブラを使用して処理を書き、自宅のラズベリーパイでcronを設定して15分間隔で定期実行するようにしています。
1 const puppeteer = require('puppeteer');
2 const user = 'xxx'
3 const pass = 'xxx'
4 const kintone_app_url = 'xxx'
5 const kintone_login_url = 'xxx'
6
7 (async () => {
8 const browser = await puppeteer.launch({
9 executablePath: '/usr/bin/chromium-browser',
10 args: ['--no-sandbox']
11 });
12 const page = await browser.newPage();
13 await page.goto(kintone_login_url)
14 await page.waitFor(1000);
15 await page.$eval('input[name="username"]', (el) => {
16 el.value = user
17 });
18 await page.waitFor(1000);
19 await page.$eval('input[name="password"]', (el) => {
20 el.value = pass
21 });
22 await page.waitFor(1000);
23 await page.click('input[type="submit"]');
24 await page.waitFor(1000);
25 await page.goto(kintone_app_url);
26 await page.waitFor(2000);
27 await browser.close();
28 })();
JavaScriptからの別ドメインへの疎通確認
クロスドメイン制約で別ドメインへのリクエストが送れないのでkintoneに用意されているkintone.proxy(url, method, headers, data, callback, errback)メソッドで回避します。
所感
今回kintone側に無理やり処理を寄せましたが、本来であればkintoneはフロント側のデータ入力と表示、データベースの役割で使用し、監視などのロジックはlambdaなど使って構築するのが良いのかなと思います。
Author And Source
この問題について(kintone縛りでURL監視システムを構築する), 我々は、より多くの情報をここで見つけました https://qiita.com/isotai/items/c4837bfb9767e8a2dbf7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .