Tema anterior: Recopilación de las API de estadísticasTema siguiente: Obtención de la estadística de escenario: get_scenario_data()


Obtención de la estadística del escenario extendido: get_data_ex()

La función de API get_data_ex permite obtener toda la información sobre el escenario, como a continuación:

El parámetro manager_data es una cadena en el formato xml. Los datos contienen toda la información sobre el escenario. Por ejemplo, el estado del escenario (en ejecución, detenido, etc.), eventos, estadísticas de escenario, entre otros. La cadena en formato xml se parece a lo siguiente:

Formato de datos XML

Las secciones siguientes demuestran cómo utilizar la cadena de xml.

Argumentos

La API get_data_ex incluye los argumentos descritos en la tabla siguiente:

Nombre

Tipo

Descripción

session_id

uint

El ID de sesión que se ha devuelto llamando a la API create_session.

scenarios_with_statistics

uint

La matriz de los ID de escenario. Recupera la estadística de los escenarios.

last_update_time

ulong

Última actualización de la marca de tiempo.

request_flag

uint

Solicita el tipo de datos. Los valores pueden ser los siguientes:

1: datos del escenario

2: datos cdp [no se utilizan ahora]

4: datos de gestión del host

8: datos de instantánea

15: todos los datos anteriores

manager_data

out string

Devuelve los datos del escenario en el formato xml.

Valores de retorno

El tipo de valor de retorno es booleano. Cuando el valor de retorno sea verdadero, el comando finalizará correctamente. Cuando el valor de retorno sea falso, el comando no finaliza correctamente. Si el valor de retorno es falso, revise el mensaje para determinar el motivo por el cual la API es errónea.

Ejemplos

Ejemplo 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;
        }

Ejemplo 2:

Esta función analiza los datos del búfer de XML (manager_data) que ha devuelto la función get_data_ex(). El ejemplo siguiente describe cómo obtener el estado del escenario cuando se ejecuta o se detiene:

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;
        }

Ejemplo 3:

Esta función analiza los datos del búfer de XML (manager_data) que ha devuelto la función get_data_ex(). El ejemplo siguiente describe cómo obtener todos los eventos para el escenario:

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));
                    }
                }
            }
        }

Ejemplo 4:

Se debe definir el parámetro scenarios_with_statistics para obtener la estadística de sincronización y replicación de un escenario. El parámetro es una matriz. Para obtener la estadística para más de un escenario, se deben agregar los ID de los escenarios a la matriz.

get_data_ex obtiene la estadística siguiente:

Nota: Las pantallas siguientes ilustran el proceso de transferencia y sincronización de la información de estadísticas.

Bytes transferidos a las réplicas

Progreso de la sincronización

Código

Esta función analiza los datos del búfer de XML (manager_data) que ha devuelto la función get_data_ex(). El código siguiente muestra cómo obtener la estadística de transferencia y sincronización. (Consulte las pantallas anteriores.)

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));
                    }
                }
            }
        }

Ejemplo 5:

El código siguiente muestra cómo recuperar la estadística de sincronización para los escenarios.

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
                        }
                    }
                }