FAQ
プログラムから ArcGIS Server サービスの起動状態を確認する方法

ナレッジ番号:5585 | 登録日:2023/07/27 | 更新日:2024/11/21

概要

ArcGIS Server 内のサービスの起動状態について、ArcGIS Server の REST API を使用することで、プログラムから取得することができます。
ここでは、JavaScript を使用して、Web ブラウザーから ArcGIS Server 内のサービスの起動状態を取得する方法をご紹介します。
サンプル コードでは、以下の処理を行います。

  • サービス名の確認

    ArcGIS Server Administrator Directory 内にある services ページ(http://<ServerName>:<Port>/arcgis/admin/services)へ HTTP リクエストを送信し、ルート フォルダーおよび個別フォルダー内にあるサービスの名前を取得します。
  • 各サービスのステータスの取得

    上と同様に ArcGIS Server Administrator Directory 内にある各サービスの status ページ(http://<ServerName>:<Port>/arcgis/admin/services/<FolderName>/<serviceName>.<serviceType>/status)へ HTTP リクエストを送信し、フォルダー内の各サービスの起動状態(Configured state および Real time state)を取得します。これらのステータスの詳細については こちらのリンク をご覧ください。
  • ステータスをブラウザー コンソールへ書き出し

    取得したステータスをブラウザー コンソールに表示します。例として Google Chrome で実行した場合のコンソール画面は以下のようになります。

サンプル コード

アプリケーションの設定

使用するオブジェクトを作成します。baseURL 等は必要に応じて変更します。トークンの取得方法については こちら をご参照ください。

var xhr = new XMLHttpRequest();
var settings = {
    baseURL: "http://localhost:6080/arcgis/admin",
    token: " **** ", // ※トークンはすでに取得したものとします
    ServiceandFoldername: "",
    ServiceNameinFolder: "",
    status: "",
};

ステータスの取得

ステータスを取得するための汎用関数を作成します。フォルダー内のサービスの配列をループ処理で確認し、結果をコンソールに書き出します。見やすいよう、コンソールの表示をグループ化します。

function GetStatus(place, consoleIndex) { // 引数には動作を行うフォルダー名と、コンソール表示の見出しを設定
    // コンソール表示のグループ化   
    console.group(consoleIndex);
    var i = 0;
    while (i < place.services.length) { // サービスの数だけループ

        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                // 取得したデータを JSON パースし、既存のオブジェクトに設定
                settings.status = JSON.parse(xhr.response);
            };
        }

        // フォルダーの有無の確認と open する URL の設定
        if (place.folderName == "/") { // フォルダー名が"/"の場合(ルート フォルダーの場合)
            openURL = settings.baseURL + "/services/" +
                place.services[i].serviceName + "." +
                place.services[i].type +
                "/status?f=pjson&token=" +
                settings.token
            // ここでは openURL = http://localhost:6080/arcgis/admin/services/<serviceName>.<serviceType>/status?f=pjson&token=<token> となる

        } else { // フォルダー名が存在する場合
            openURL = settings.baseURL + "/services/" +
                place.folderName + "/" +
                place.services[i].serviceName + "." +
                place.services[i].type +
                "/status?f=pjson&token=" +
                settings.token
            // ここでは openURL = http://localhost:6080/arcgis/admin/services/<FolderName>/<serviceName>.<serviceType>/status?f=pjson&token=<token> となる
        }

        xhr.open("GET", openURL, false); // openURL へ GET メソッドでリクエストを出す
        xhr.send();   // データを送信する

        // コンソールに表示
        console.log("ServiceName:",
            place.services[i].serviceName,
            "/ServiceType:",
            place.services[i].type,
            "/configuredState:",
            settings.status.configuredState,
            "/realTimeState:",
            settings.status.realTimeState);

        i++;
    };

    // コンソール表示のグループ化 
    console.groupEnd();
};

services の情報の取得

ArcGIS Server Administrator Directory の services にリクエストを出し、ルート フォルダーにあるフォルダー名とサービス名を JSON 形式で取得します。

function GetInfo() {
    // リクエストが成功した後の動作を設定  
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            // 取得したデータを JSON パースし、既存のオブジェクトに設定            
            settings.ServiceandFoldername = JSON.parse(xhr.response);
        }; 
    }
    xhr.open("GET", settings.baseURL + "/services?f=pjson&token=" + settings.token, false); // GET メソッドでリクエストを出す
    xhr.send(); // データを送信する
    checkRoot(); // ルート フォルダーでの動作へ
};

ルート フォルダーでの動作

ルート フォルダーでの動作を設定します。ルート フォルダー内にあるサービスのステータスを、先程作成した関数 GetStatus を用いて取得します。引数には動作を行うフォルダー名と、コンソール表示の見出しを渡します。

function checkRoot() {
    // サービスのステータスを取得
    GetStatus(settings.ServiceandFoldername, "Root folder");
    checkFolder(); // 個別フォルダー内での動作へ
};


個別フォルダーについての動作

次に、ユーザーが作成したフォルダーおよびシステム フォルダー、ユーティリティー フォルダーについて動作を設定します。ルート フォルダー内の個別フォルダーの配列をループ処理で確認し、各個別フォルダーの中のサービスのステータスを関数 GetStatus を用いて取得します。

function checkFolder() {

    // コンソール表示のグループ化  
    console.group("Folders");

    var j = 0;
    while (j < settings.ServiceandFoldername.folders.length) { // フォルダーの数だけループ

        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                // フォルダー内の情報(サービス名)を取得してパース
                settings.ServiceNameinFolder = JSON.parse(xhr.response);
            };
        }
        xhr.open("GET", settings.baseURL + "/services/" +
            settings.ServiceandFoldername.folders[j] +
            "?f=pjson&token=" + settings.token, false); // GET メソッドでリクエストを出す
        xhr.send(); // データを送信する

        // サービスのステータス取得
        GetStatus(settings.ServiceNameinFolder, settings.ServiceNameinFolder.folderName);

        j++;
    };

    // コンソール表示のグループ化  
    console.groupEnd();
};


サンプルのダウンロード

上記のプログラムを実行するアプリケーションのサンプルを、ZIP (HTML, CSS, JavaScript) ファイルでご用意しました。

こちらのサンプルはあくまでも一例であり、コードを実行して生じたいかなる損害についても弊社では責任を負いかねます。

sample

 

メタデータ

種類

製品