前のトピック: 統計収集 API次のトピック: シナリオの統計の取得: get_scenario_data()


拡張シナリオ統計の取得: get_data_ex()

get_data_ex API 関数を使用すると、以下のようなシナリオ情報をすべて取得できます。

パラメータ manager_data は XML 形式の文字列です。 このデータにはすべてのシナリオ情報が含まれます。 たとえば、シナリオ ステータス(実行中、停止など)、イベント、シナリオ統計などです。 XML 形式の文字列とは、以下のようなものです。

XML データ フォーマット

以下のセクションでは、XML 文字列の使用方法を示します。

引数

この get_data_ex API には、以下のテーブルに記述されている引数が含まれています。

名前

タイプ

説明

session_id

uint

create_session API をコールすることで返されたセッション ID。

scenarios_with_statistics

uint

シナリオ ID の配列。 シナリオの統計情報を取得します。

last_update_time

ulong

前回更新されたタイムスタンプ。

request_flag

uint

データ タイプをリクエストします。 値は以下のようになります。

1 - シナリオ データ

2 - cdp データ(使用されていません)

4 - ホスト管理データ

8 - スナップショット データ

15 - 上記のすべてのデータ

manager_data

out string

XML 形式でのシナリオのデータを返します。

戻り値

戻り値のタイプはブールです。 戻り値が true の場合、コマンドは正常に完了しています。 戻り値が false の場合、コマンドは正常に完了しませんでした。 戻り値が false の場合は、メッセージを確認して API が失敗した理由を特定してください。

例 1:

public bool get_data_ex_example()
        {
            try
            {
                uint[] scenarios_with_statistics = new uint[] { _scenario_id };
                uint request_flag = 1;
                ulong last_update_time = 0;
                string manager_data = "";
                bool res = get_mng().get_data_ex(_session_id, scenarios_with_statistics, request_flag, ref last_update_time, out manager_data);
                return res;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            return false;
        }

例 2:

この関数は、get_data_ex() 関数によって返された XML バッファ データ(manager_data)を解析します。 以下の例は、シナリオの実行時または停止時にシナリオの状態を取得する方法を示します。

string get_scenario_state (string manager_data, string scenario_name_or_id)
        {
            string scenario_state = "unknown";
            XmlDocument manager_data_doc = new XmlDocument();
            manager_data_doc.LoadXml(manager_data);
            XmlNode root_node = manager_data_doc.SelectSingleNode(".//manager_data");
            if (root_node == null)
            {
                return scenario_state;
            }
            //get all the scenario data information
            XmlNode scenario_nodes = root_node.SelectSingleNode(".//scenarios");
            if (scenario_nodes == null)
            {
                return scenario_state;
            }
            foreach (XmlNode scenario_node in scenario_nodes.ChildNodes)
            {
                uint scenario_id = 0;
                string scenario_name = "";
                XmlAttribute id_attr = scenario_node.Attributes["id"];
                if (id_attr != null)
                    scenario_id = Convert.ToUInt32(id_attr.Value);
                XmlAttribute name_attr = scenario_node.Attributes["name"];
                if (name_attr != null)
                    scenario_name = name_attr.Value;

                if (scenario_name_or_id != scenario_id.ToString() && scenario_name_or_id.ToLower() != scenario_name.ToLower())
                    continue;

                //get the scenario status, running or stopped
                foreach (XmlNode node in scenario_node.ChildNodes)
                {
                    //get the scenario state, running or stop
                    if (0 == string.Compare("state", node.Name, true))
                    {
                        if (node.Attributes["val"] != null)
                        {
                            scenario_state = node.Attributes["val"].Value.ToLower();
                        }
                    }
                }
            }
            return scenario_state;
        }

例 3

この関数は、get_data_ex() 関数によって返された XML バッファ データ(manager_data)を解析します。 以下の例は、シナリオのすべてのイベントを取得する方法を示します。

void get_scenario_events(string manager_data, string scenario_name_or_id, ref ArrayList events)
        {
            XmlDocument manager_data_doc = new XmlDocument();
            manager_data_doc.LoadXml(manager_data);
            XmlNode root_node = manager_data_doc.SelectSingleNode(".//manager_data");
            if (root_node == null)
            {
                return ;
            }
            //get all the scenario data information
            XmlNode scenario_nodes = root_node.SelectSingleNode(".//scenarios");
            if (scenario_nodes == null)
            {
                return ;
            }
            foreach (XmlNode scenario_node in scenario_nodes.ChildNodes)
            {
                uint scenario_id = 0;
                string scenario_name = "";
                XmlAttribute id_attr = scenario_node.Attributes["id"];
                if (id_attr != null)
                    scenario_id = Convert.ToUInt32(id_attr.Value);
                XmlAttribute name_attr = scenario_node.Attributes["name"];
                if (name_attr != null)
                    scenario_name = name_attr.Value;

                if (scenario_name_or_id != scenario_id.ToString() && scenario_name_or_id.ToLower() != scenario_name.ToLower())
                    continue;

                //get the scenario status, running or stopped
                foreach (XmlNode node in scenario_node.ChildNodes)
                {
                    //get the scenario state, running or stop
                    if (0 == string.Compare("gen", node.Name, true))
                    {
                        events.Add(new event_data_c(node));
                    }
                }
            }
        }

例 4:

シナリオの同期/レプリケーションの統計を取得するには、scenarios_with_statistics パラメータを定義します。 このパラメータは配列です。 複数のシナリオの統計を取得するには、それらのシナリオの ID を配列に追加します。

get_data_ex は以下の統計を取得します:

注: 以下の画面は、転送および同期の統計情報のプロセスを示します。

レプリカへの転送済みバイト数

同期の進捗状況

コード

この関数は、get_data_ex() 関数によって返された XML バッファ データ(manager_data)を解析します。 以下のコードは、転送および同期の統計情報を取得する方法を示します (前の画面を参照してください)。

void get_scenario_sync_statistics(string manager_data, string scenario_name_or_id, ref ArrayList sync_statistics)

        {
            XmlDocument manager_data_doc = new XmlDocument();
            manager_data_doc.LoadXml(manager_data);
            XmlNode root_node = manager_data_doc.SelectSingleNode(".//manager_data");
            if (root_node == null)
            {
                return;
            }
            //get all the scenario data information
            XmlNode scenario_nodes = root_node.SelectSingleNode(".//scenarios");
            if (scenario_nodes == null)
            {
                return;
            }
            foreach (XmlNode scenario_node in scenario_nodes.ChildNodes)
            {
                uint scenario_id = 0;
                string scenario_name = "";
                XmlAttribute id_attr = scenario_node.Attributes["id"];
                if (id_attr != null)
                    scenario_id = Convert.ToUInt32(id_attr.Value);
                XmlAttribute name_attr = scenario_node.Attributes["name"];
                if (name_attr != null)
                    scenario_name = name_attr.Value;

                if (scenario_name_or_id != scenario_id.ToString() && scenario_name_or_id.ToLower() != scenario_name.ToLower())
                    continue;

                //get the scenario status, running or stopped
                foreach (XmlNode node in scenario_node.ChildNodes)
                {
                    //get the scenario state, running or stop
                    if (0 == string.Compare("statistics", node.Name, true))
                    {
                        sync_statistics.Add(new host_statistics_c(node));
                    }
                }
            }
        }

例 5:

以下のコードは、シナリオの同期統計情報を取得する方法を示します。

ArrayList sync_statistics = new ArrayList();
                get_scenario_sync_statistics(manager_data, "FileServer 1", ref sync_statistics);
                //show the statistics
                foreach (host_statistics_c stat in sync_statistics)
                {
                    //host name
                    string host_name = stat.host_name;
                    //transmission statistics
                    foreach (transfer_to_replica_c trans in stat.trans_to_reps)
                    {
                        //handle the transfer data such as speed.
                        ulong speed = trans.transmission_speed;
                    }
                    //sync statistics
                    foreach (sync_statistics_host_c sync_host in stat.children_hosts)
                    {
                        //root directory
                        foreach(sync_statistics_root_dir_c root_dir in sync_host.sync_root_dirs)
                        {
                            //root_dir.total_size
                        }
                    }
                }