[Blue Prism]制御室のStatusの種類とそれらの意味 #blueprism

クリスマスのアドベントカレンダーからいらした皆様、こちらはただの普通の記事です。毎年クリスマス感ゼロでごめんなさい。

# ステータスとは
制御室のここに表示されるやつのことです。
キューのステータスとかもありますが、今回はプロセスの処理具合のステータスのことです。
![q001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/aff8e7d7-1261-a774-6fb6-cb0daae1adc9.png)

このステータスに表示される「Pending」「Running」などのステータスは、DBの「BPAStatus」テーブルにて定義されています。
![q002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/0092aa1e-64a5-56d6-392e-e273cb8d744e.png)
これらの定義されているステータスは、実行ログに残ります。
## それぞれのステータスのだいたいの説明
### Pending
プロセスはRRに割り付け済で、スケジュール実行とか「今すぐ実行」で実行指示はされてるけど、まだ実行されてない。字がオレンジ。この状態ならまだDeleteできる（プロセス名を右クリック）。
### Running
いま実行中。字が緑。
###T erminated
例外スローされて終了した。字が黒。
### Stopped
Immediately StopとかRequest Stopとかを人間が手で指令して途中で止めたやつ。字が赤。
### Completed
ふつうに完了した。字が青。

#DBの定義にないステータス
上の「BPAStatus」テーブルに載ってないやつは、実行ログには残りません。
なんで残らないかというと、下に挙げる2個のステータスは「いまこの瞬間にRRはこのような状態です」という **いまの状態の通知にすぎなく、「これが出た＝対処すべき事態」とかいう話ではない** から。（これが出たあと結局処理止まっとるとかそういうことはありますが、このステータスが直接の原因を示すものではない、ということです）

### Warning
有名。フォーラムやなんかで「これ何？」っていう質問が定期的に出がちなやつです。

公式の説明　[What does a status of 'Warning' mean when displayed in Control Room?](https://support.blueprism.com/ja-JP/support/solutions/articles/7000076858-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%AB%E3%83%BC%E3%83%A0%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E7%8A%B6%E6%85%8B%E3%80%8C%E8%AD%A6%E5%91%8A%E3%80%8D%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

ステージの「Warning threshold」とその右の「Number of minutes」で定義された時間のぶん操作が無いと出るステータスです。
「定義された時間」というのは「Warning threshold」が「System Default」だったらデフォルトの時間（5分）、ここのドロップダウン選択を「Overridden」に変えると「Number of minutes」を自分で設定できます。
![q003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/f86fee9f-b567-c96e-54fc-8bbc9f95da13.png)
#### 対策
たとえばリソースとかターゲットアプリケーションがそのときだけ一時的に激重になってるとか、意図的に500秒の超長いSleepを入れているとか、原因がわかってて、待ってて大丈夫なら、待ってると操作が再開されて「Running」に戻ったりすることもあります。
そうじゃなければオブジェクトのつくり（やたら長く待機してないかとか、ハイライトするところが意図する箇所と違ってないかとか、ターゲットアプリケーションからの応答がなかったら待ってないで終わるようにするとか）をチェックしたほうがいいかもしれません。

### Not Responding
先日初めて見ました。（これがこの記事を書いておこうと思ったきっかけです）
しばらく放置していたら「Running」に戻りました。当該処理は正常終了しました。

また出たときは、今度は「Running」に戻らず「Not Responding」のままで動いている様子もなく、Immediately Stopをかけてもガン無視状態でどうしようもなく、仕方なくRRに人間がサインインして再起動しました。こんな腕ずくな方法で正しい対処かどうかはわかりませんが……。

これは何だろうと検索しても情報も資料も出てこなく、公式コミュニティでも「これが出た、教えて」と言っている人はいますが回答がついてないので、ほんとにレアケースなのかもしれません。

調べてわからなかったらサポートチケットで公式に質問するのが早いので質問してみました。
返ってきた回答は

+ ターゲットアプリケーションとRR間の通信が失われたときに出るステータス（永遠に失われたんじゃなくて「そのときに通信してない」っていう意味）
+ Blue Prismからではなく、環境的なところで発生している
    + ターゲットアプリケーションを実行するのに Windows OS リソース（CPU、RAMなど）が不十分な場合
    + ターゲットアプリケーションが過負荷になっている場合　など

なので、Blue Prismのログとかでなく、当該RRのWindowsイベントビューアを確認するほうが原因がわかるとのことです。
[Windowsで発生したことを確認できるWindowsイベントログを解説する](https://ascii.jp/elem/000/001/993/1993897/)
これが何でどうやって何を見るとかのお話はBlue PrismでなくてWindowsのお話になってしまうので、別に書きます。

※イベントログを眺めていて、たぶんこれじゃないかと思われるものを自分用にここに貼っておきます。
　[Windows10 1809 DistributedCOM エラー 10016 SecurityCenter がらみの解消](http://gohstisinourbrain.blog.fc2.com/blog-entry-59.html)
　[Windows 10の イベントID 10016 を解消する方法](https://www.tnrsca.jp/windows-10%E3%81%AE-%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88id-10016-%E3%82%92%E8%A7%A3%E6%B6%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)
　こんなログが出てたから…… これイベントID10016っていうコレよね？

>アプリケーション固有 のアクセス許可の設定では、CLSID 
>{-}
> および APPID 
>{-}
> の COM サーバー アプリケーションに対するローカルアクティブ化のアクセス許可を、アプリケーション コンテナー 利用不可 SID (利用不可) で実行中のアドレス LocalHost (LRPC 使用) のユーザー NT AUTHORITY\SYSTEM SID (S-1-5-18) に与えることはできません。このセキュリティ アクセス許可は、コンポーネント サービス管理ツールを使って変更できます。


#### 対策
頻発しちゃったら、Windowsイベントビューアとかタスクマネージャとかで原因を探すのが根本解決ですが
端的に言ってRRがターゲットアプリを扱うのにいっぱいいっぱいになってるってことなので
たとえばたくさんダウンロード処理をさせる処理の場合だと
「ブラウザでファイルをダウンロードするときにメモリを占有する→占有されたメモリが解放されずにまたすぐダウンロード→さらにメモリ占有……」
でメモリが食われちゃってるとか的な感じ？

なので

+ 定期的に（日次とか）RRを再起動する
+ プロセスは、使ったアプリは使い終わったらちゃんとみんな閉じるとか、DBとかのコネクションとかcreateしたインスタンスとかもちゃんと終わるように作る習慣をつける
+ アプリでめっちゃいっぱい何かを繰り返す処理の場合は、アプリを立ち上げ直すなどの手順を入れてメモリが食われ続けないようにしてみる

みたいな地味な対策がいいのかしら……
※あと「環境ロックはちゃんと解除」とかも思ったんですが、それは6.5でBlue Prismがよろしくやってくれる仕様に変わったようです。解除しなかった人が多かったんだろうなあ……　6.5より前のVerをお使いの場合はちゃんと明示的に解除したほうがいいと思います。

そのときだけたまたま出たのなら、たとえばネット見てて「なんかインターネット重いかも……超ラグい……」とか思う時と同じ感じで、たまたま重かっただけ、という可能性もあります。


# とりあえず終わりです
Blue Prismのサポートに質問したところ、上記で挙げたもの以外のステータスは無いそうです。

やっぱり、わかんないことがあるときは、ひとりでわかんないままにしたり、SNSでエアリプして神が釣れるのを待つとかするよりは、サポートチケットに投げて教えてくださいーってやるほうが的確だし効率がいいなと思いました。
サポートに投げたらお返事をくれるだけじゃなくて、必要ならチャットしてくれたりリモートで画面やプロセスを見てくれたりしてマジ親切対応なのでオススメです。
このお話もサポートチケットに投げてまだいろいろ聞いている最中なので、良いことを教わったらこの記事に随時追記します。

[サポートチケットを挙げる方法（公式の説明書）](https://portal.blueprism.com/customer-support/how-can-i-get-help-customer-support)