ページビューの合計

ラベル REST の投稿を表示しています。 すべての投稿を表示
ラベル REST の投稿を表示しています。 すべての投稿を表示

2022年7月19日火曜日

#郵便番号 から #住所 を取得しよう( #鬼わか の #REST #API を適用したサンプル)

 I am pleased to present a sample REST API application that I gave to one of you.

If you would like to learn the rudiments of LotusScript, please register for the LotusScript course on September 14 and 15.

みなさま、こんにちは。
早速ですが、まずは告知から・・・

●9月9日(金) ノーツコンソーシアム 第三回 大阪研究会(会場開催・オンライン)

今回は大阪を飛び出して、京都で開催します。
普段は関西におられないゲストが来られるかも!!
さらに・・・こんなビュー、作ってみたくないですか?


当日のセッションで教えて頂けるかも!!
きっと見逃せない研究会になるはずです。ご期待ください。

終了後は、夏の京都といえば・・・そう川床ですね。

もちろんリモート配信も行いますので、ぜひみなさまのご参加をお待ちしております。

※コロナの状況により、懇親会、オンサイト開催を見送る場合がございますので、あらかじめご了承ください。

2019年3月25日月曜日

ノーツでサーバーの #サービス監視

This time, I applied the logon management app that was created the other day, and tried to finish it as a service monitoring app for the server.

みなさま、こんにちは!!

curl にはまった筆者です。

今回は先日の「ログオン管理」を応用して、サーバーのサービス死活監視を開始致しましたので、その方法を紹介致します。

実は弊社で使用しているとあるサーバーなのですが、かなり負荷が大きいようで、時折サービスが落ちてしまうというものがあるのです。
仮想サーバーですので、リソースが潤沢にあればそちらを割り当ててやればいいのですが、導入から4年半を経過したオンプレのサーバーですので、そうもいかず・・・
ということで、根本解決には至らないのですが、サービスの死活監視を行うというものを作ってみたというのが背景になります。

取り急ぎ監視するサーバーのCドライブにcurlをインストールします。
手順はお手数ですが、先の「ログオン管理」をご確認ください。

次に監視するバッチファイルです。
対象サーバーに以下の記述を行ったバッチファイルを作成します。

その前に対象となるサービスの名前を確認しなければなりません。
対象サーバーのコマンドプロンプトで以下を実行し、名前を確認します。


 sc getkeyname **名前**


例えば"DHCP Client"ならば、


 sc getkeyname "DHCP Client"


と実行します。
すると以下のような画面が表示され、名前が"Dhcp"であることがわかります。


その名前を利用し、以下内容のバッチファイルを作成します。
申し訳ありません、コマンド内容についてはここでは触れませんので、ご了承ください。


 @ECHO OFF
 set dt=""
FOR /F "USEBACKQ" %%i IN (`sc query ^| findstr /i "名前"`) DO @SET DT=%%i
 IF %DT%=="" GOTO error
 GOTO end
 :error
 cd c:\curl\bin
 curl -i -H "Content-type: application/json" -X POST -d  "{\"creator\":\"名前\",\"stamp\":\"サーバー名\",\"time\":\"%date% %time%\"}" -u "ノーツユーザー名":ノーツパスワード
http://サーバー名/ノーツファイル名.nsf/api/data/documents?form=log
 :end


curl部分は、前回作成したバッチファイルをそのまま転用しています。
ノーツアプリケーションもコピーして少し修正して済まそうという魂胆です。
タスクスケジューラーに「名前」のタスクが実行してなければ、error処理が発生し、curl以降が実行されるというものです。

ちなみにノーツアプリケーションのフィールドには、以下内容がセットされることになります。

 creator : サービスの名前
 stamp : サーバーの名前
 time : 日時

あとはタスクスケジューラーに毎日実行するタスクとしてこのバッチファイルを登録しておきます。

続いてノーツアプリケーションです。
先の通り、「ログオン管理」をコピーして使用します。
とは言っても、先のバッチファイル側で制御していますので、コピーするだけで既にerror処理が発生すれば、文書が追加されてきますので、テストしてみてください。

あとはビューやフォームを少しさわるだけで完成しました!!

まずはビューから


すいません、サーバー名とサービス名をぼかしたので、わかりにくいですね(汗

続いてフォームです。


結構、いい感じに仕上がっているかと思います。

それでは文書が新規作成された際に、メールを飛ばすエージェントを追加します。
新規エージェント作成にて、シンプルアクションを使用します。


シンプルアクションでは、「メールメッセージの送信」を選択し、宛先・件名・文面を記述します。
また「メッセージに文書リンクを含む」にチェックしておきます。



最後にトリガーですが、シンプルアクションではイベントでの検知ができない(?)・・・詳しい方、フォローお願いします。
また今回は1日1回9時にバッチファイルを実行するイベントとして設定したため、「一日一回以上」のスケジュールとして、登録しました。


エージェントの実行間隔を23時間とし、有効時間帯を9:30~9:50としましたので、おそらくは、

 9:00 タスク実行・・・サービスが起動していない場合、ノーツデータベースに文書が追加される
 9:30 エージェント実行・・・文書が追加されていた場合、文書リンクのついたメールが送信される⇒次回起動予定は翌8:30ですが、有効時間帯の9:30を待ってエージェントが実行される

というイメージになります。

今回届いたメールは以下のような感じになります。



以上で組み込みは完了となります。

テストは9時前に意図的にタスクを落としてノーツに文書が追加され、メールが発信されるかどうかを2日続けて実施する必要があります。

なお実際の運用では、サービスダウンを検知した際に、該当のサービスを起動する記述をバッチファイルに組み込めば、検知後にサーバーにログインしてサービスを起動するという必要もなくなります。
ただ自動で再起動してしまうと、落ちていたことを知る機会がログを見なければなりませんので、このようなノーツアプリケーションへの連携は効果があると考えます。

また今回は1日1回としましたが、さらに細かく監視したいという場合もあるかと思います。
その場合はタスクスケジューラーに必要間隔で登録し、エージェントの間隔も考慮すれば、ある程度は細かく対応できるようになります。

以上、あまりにも簡単なのですが、まだまだ使い方は増えそうですよね。
また何か思いついたら紹介させて頂きます。


2019年2月13日水曜日

ノーツでログオン管理

This time I created an application to record the logon and logoff records in Notes, so I will introduce it.

みなさま、こんにちは!!
USではThink2019が盛り上がっているようですね。
参加されている皆様、ぜひ満喫してきてください。
また戻られましたら、いろいろと情報発信もお願いしますね!!
来週のIBM Notes/Domino Day 2019 Springでのフィードバックも期待してます!

さて今回はログオン・ログオフ時間をノーツアプリに収集することに成功しましたので、記事とさせて頂きます。
※弊社ではクライアントは全員VDIを使用しておりますが、こちらの環境でも使用できることは確認済です。

そもそも弊社では事務所入り口に置いた共有パソコンのブラウザでXPagesで作成したノーツアプリを使ってタイムレコーダー

【第1回】タイムレコーダーアプリ作成~アプリケーションの準備~
以降でご紹介

を打刻していたのですが、労働基準法改正に伴い、さらに管理を強化する必要があることから、何かしらシステムで受けこむよう指示が出ておりました。
もちろんクライアント管理サービスなども考慮したのですが、性能が良すぎて価格的には安価ではないというところがあり、それならばノーツで何かできないかと考えた次第です。

早速ですが、アプリのイメージです。
ノーツアプリそのものは至って簡単です。
フィールドとして、creator,stamp,timeの3項目のみのアプリになります。
timeのみ「作成時の計算結果」として@createdとしています。
残り2項目は「編集可能」になっています。


ビューは単純に日時順と氏名別を作成しています。
以下は日時順のイメージです。



今回のノーツアプリは単純にデータを受けこむだけのものを想定してあります。
文書の作成は curl コマンドから REST を利用してアプリに書き込むこととしてあります。
従いまして、ノーツアプリ側でRESTからアクセスを受け付ける設定が必要です。
こちらについては、御代チャンピオンのブログがたいへん参考になりますので、ご覧ください。

Notes/Domino でREST APIを使ってみよう-前半

curlについては、以下サイトが参考になりました。

IBM Domino REST API 利用ガイド

まずはwindowsでcurlを使えるように設定を行います。

こちらのサイトからcurlがダウンロード可能です。
筆者はWindows 32bit 版をダウンロードして使っています。

ダウンロードしたzipファイルを解凍し、フォルダを【curl】にリネームします。
このフォルダをどこでもいいのですが、今回はCドライブ直下に移動させました。

curlを利用するには、コマンドプロンプトからcurl.exeのあるディレクトリに移動させるだけで使用できます。

今回の場合ですと、


  cd C:¥curl¥bin


となります。


正しく稼動するかは、以下コマンドでHelpが表示されればOKです。


  cd C:¥curl¥help


それではバッチファイルを作成します。
私は以下[logon.bat]と[logoff.bat]を作成し、対象クライアントのC:¥BATCHフォルダに保存しました。

logon.bat

  ECOH OFF
  cd c:¥curl¥bin
  curl -i -H "Content-type: application/json" -X POST -d "{¥"creator¥":¥"%USERNAME%¥",¥"stamp¥":¥"ログオン¥"}" -u "管理者名":パスワード http://サーバーパス/アプリ名.nsf/api/data/documents?form=フォーム別名


curlのオプションについては、私自身理解しきれておりませんので、割愛させて頂きます。
要はcreatorフィールドに %USERNAME% を用いて、ログオンユーザーの名前をセット。stampフィールドに固定値としてログオンをセットするようなイメージです。
timeフィールドは作成時の計算結果フィールドですので、こちらでは操作していません。

logoff.batについては、先の「ログオン」を「ログオフ」にしただけのものを準備します。

バッチファイルの準備ができましたら、弊社ではADのグループポリシーに設定を行いました。
ログオンする全社員を対象にデータを取得することが目的であり、且つログオフ時にバッチを実行させるにはポリシーを使う必要があるためです。

新規でグループポリシーオブジェクトを作成(場所は各企業様で必要な場所へ作成してください)し、グループポリシー管理エディターにてスクリプトを割り当てます。
割り当てる場所は
[ユーザーの構成] - [ポリシー] - [Windowsの設定] - [スクリプト(ログオン/ログオフ)]です。


こちらのログオンにlogon.bat、ログオフにlogoff.batを割り当てます。


続いて、グループポリシーを即時有効にするため、コマンドプロンプトにて以下を実行します。


  geupdate /force


それでは試しにログオンしてみましょう。
ノーツアプリで日時順ビューを開いた画面です。



うーん、ふたつ問題がありますね。
ひとつはスタンプ。「ログオン」と表示して欲しかったのですが、やはり2バイト文字は制限があるようです。
さらに問題は日時。
単純にアプリから新規作成時には作成時の計算結果としてtimeの値が保存、表示されたのですが、RESTから送り込んだため計算が行われず、以下のように文書にtimeの値すらありません。


ということで、まずは簡単なstampフィールドからです。
先のバッチファイルの「ログオン」「ログオフ」を半角で「LogON」「LogOFF」にしてみました。
先のログインした端末をログオフすると、


当たり前ですが、うまく取得できました。

次に日時です。
エージェントでとも考えたのですが、もっと簡単にtimeフィールドもバッチ側から送り込む方法に変更することにしてみました。

先のバッチファイルを以下のように変更します。


  ECOH OFF
  cd c:¥curl¥bin
  curl -i -H "Content-type: application/json" -X POST -d "{¥"creator¥":¥"%USERNAME%¥",¥"stamp¥":¥"ログオン¥",¥"time¥":¥"%date% %time%¥"}" -u "管理者名":パスワード http://サーバーパス/アプリ名.nsf/api/data/documents?form=フォーム別名


念のため、ノーツアプリのtimeフィールドも作成時の計算結果から「編集可能」に変更し、ログオン/ログオフしてみました。


値が取得できました。

使わないですが、フォームです。


こちらもOKですね。
念のため、編集して保存してみたとろ、少しだけ違和感のある動きが・・・


そう、ノーツアプリ側の時刻の表示設定がフォームでは「時分」、ビューでは「一般」になっていたため、保存することで秒が切り捨てられたようです。
ですので、「時分秒」に設定しなおし、正しく得られるようになりました。

ちなみにノーツビューで「表形式でコピー」してエクセルに貼り付けたものがこちらになります。


日時の書式設定は「ユーザー定義 yyyy/m/d h:mm」と認識されているため、集計にも利用できるはずです。



いかがですか?
ログオン/ログオフスクリプトとノーツアプリだけで、ユーザーのログオン/ログオフが記録できるようになりました。

まずは今回の案件がパソコン使用時間の収集という目的であるため、弊社では本アプリを使うこととします。
弊社のような1人SEや専任者がいない会社様などですと、それなりに使えるのではないかと思います。

※¥マークは"/"に変換されるため、全角文字を使用しておりますので、ご注意ください。