/*
 * sga-common.idl
 *
 * $Author$
 * $Revision$ - $Date$
 */

#ifndef _SGA_COMMON_IDL
#define _SGA_COMMON_IDL

module sgaidl {
  typedef sequence<string> StringList;

  /** \brief Par de chave e valor. */
  struct Pair {
    string key;
    string value;
  };

  /** \brief Mapa chave-valor. */
  typedef sequence<Pair> Dictionary;
  
  /**
   * \brief Propriedades de cada nó.
   */
  typedef sequence<Dictionary> NodeProperties;

  /**
   * \brief Propriedades do SGA
   */
  struct SGAProperties {
     Dictionary properties; /** Propriedades do SGA */
     NodeProperties nodesProperties; /* Propriedades de cada nó. */
  };

  /** \brief Nome do SGA */
  const string SGA_NAME = "csbase_sga_name";
  /** \brief Indica se o SGA está apto a executar comandos - DEPRECATED */
  const string SGA_ENABLED = "csbase_sga_enabled";
  /** \brief Diretório raiz para localização do repositório de algoritmos */
  const string SGA_ALGORITHM_ROOT_DIR = "csbase_algorithm_root_directory";
  /** \brief */
  const string SGA_CSFS_HOST = "csbase_csfs_host";
  /** \brief */
  const string SGA_CSFS_PORT = "csbase_csfs_port";
  /** \brief */
  const string SGA_CSFS_ROOT_DIR = "csbase_csfs_root_dir";
  /** \brief Separador de arquivos */
  const string SGA_FILE_SEPARATOR = "csbase_file_separator";
  /** \brief Diretório raiz para localização do repositório de projetos */
  const string SGA_PROJECT_ROOT_DIR = "csbase_project_root_directory";
  /** \brief Diretório raiz para localização das sandboxes de execução dos comandos */
  const string SGA_SANDBOX_ROOT_DIR = "csbase_sandbox_root_directory";
  /** \brief Indica se o SGA tem acesso ao disco */
  const string SGA_HAS_DISK_ACCESS = "csbase_has_disk_access";
  /** \brief Informações sobre os jobs em execução no SGA */
  const string SGA_JOBS_INFO = "csbase_jobs_info";

  /** Ações de controle sobre jobs suportadas */
  const string JOB_CONTROL_ACTIONS = "csbase_job_control_actions";
  /** Ações de controle sobre SGA suportadas */
  const string SGA_CONTROL_ACTIONS = "csbase_sga_control_actions";

  /** \brief Velocidade do processador do nó */
  const string SGA_NODE_CLOCK_SPEED_MHZ = "csbase_clock_speed_mhz";
  /** \brief Carga de CPU - Último 1 minuto */
  const string SGA_NODE_LOAD_AVG_1MIN_PERC = "csbase_load_avg_1min_perc";
  /** \brief Carga de CPU - Últimos 5 minutos */
  const string SGA_NODE_LOAD_AVG_5MIN_PERC = "csbase_load_avg_5min_perc";
  /** \brief Carga de CPU - Últimos 15 minutos */
  const string SGA_NODE_LOAD_AVG_15MIN_PERC = "csbase_load_avg_15min_perc";
  /** \brief Memória RAM livre */
  const string SGA_NODE_MEMORY_RAM_FREE_PERC = "csbase_memory_ram_free_perc";
  /** \brief Tamanho da memória RAM do nó */
  const string SGA_NODE_MEMORY_RAM_INFO_MB = "csbase_memory_ram_info_mb";
  /** \brief Memória swap livre */
  const string SGA_NODE_MEMORY_SWAP_FREE_PERC = "csbase_memory_swap_free_perc";
  /** \brief Tamanho da memória de swap do nó */
  const string SGA_NODE_MEMORY_SWAP_INFO_MB = "csbase_memory_swap_info_mb";
  /** \brief Nome do nó */
  const string SGA_NODE_NAME = "csbase_name";
  /** \brief Número de jobs em execução no nó */
  const string SGA_NODE_NUMBER_OF_JOBS = "csbase_number_of_jobs";
  /** \brief Num. de processadores do nó */
  const string SGA_NODE_NUM_PROCESSORS = "csbase_num_processors";
  /** \brief Identificador de plataforma do nó */
  const string SGA_NODE_PLATFORM_ID = "csbase_platform_id";
  /** \brief Recursos disponíveis em um nó */
  const string SGA_NODE_RESOURCES_SEQ = "csbase_resources";

  const string SGA_ERROR_FLAG = "csbase_error_flag";

  /** \brief */
  const string SGA_BOOLEAN_TRUE = "csbase_true";
  /** \brief */
  const string SGA_BOOLEAN_FALSE = "csbase_false";

  /** \brief */
  const string COMMAND_EXECUTION_PATH = "csbase_command_path";
  /** \brief */
  const string COMMAND_EXECUTION_ROOT_PATH = "csbase_command_root_path";
  /** \brief */
  const string COMMAND_EXECUTION_OUTPUT_PATH = "csbase_command_output_path";
  /** \brief */
  const string COMMAND_EXECUTION_SANDBOX_PATHS_SEQ = "csbase_command_sandbox_paths";

  /** \brief */
  const string COMMAND_PID = "csbase_command_pid";
  /** \brief */
  const string COMMAND_PPID = "csbase_command_ppid";
  /** \brief */
  const string COMMAND_STRING = "csbase_command_string";
  /** \brief */
  const string COMMAND_EXEC_HOST = "csbase_command_exec_host";
  /** \brief Estado do comando */
  const string COMMAND_STATE = "csbase_command_state";
  /** \brief Identificador do processador do comando */
  const string COMMAND_PROCESSOR_ID = "csbase_command_processor_id";
  /** \brief Memória utilizada na execução do comando (em MB) */
  const string COMMAND_MEMORY_RAM_SIZE_MB = "csbase_command_memory_ram_size_mb";
  /** \brief Swap utilizado na execução do comando (em MB) */
  const string COMMAND_MEMORY_SWAP_SIZE_MB = "csbase_command_memory_swap_size_mb";
  /** \brief Percentual da CPU utilizado na execução do comando */
  const string COMMAND_CPU_PERC = "csbase_command_cpu_perc";
  /** \brief Tempo de CPU da execução do comando (em SEC) */
  const string COMMAND_CPU_TIME_SEC = "csbase_command_time_sec";
  /** \brief Tempo de relógio da execução do comando (em SEC) */
  const string COMMAND_WALL_TIME_SEC = "csbase_command_wall_time_sec";
  /** \brief Tempo do usuário da execução do comando (em SEC) */
  const string COMMAND_USER_TIME_SEC = "csbase_command_user_time_sec";
  /** \brief Tempo do systema da execução do comando (em SEC) */
  const string COMMAND_SYSTEM_TIME_SEC = "csbase_command_system_time_sec";
  /** \brief Tamanho da memória virtual utilizado na execução do comando */
  const string COMMAND_VIRTUAL_MEMORY_SIZE_MB = "csbase_command_virtual_memory_size_mb";
  /** \brief Quantidade de dados lidos na execução do comando (em KB) */
  const string COMMAND_BYTES_IN_KB = "csbase_command_bytes_in_kb";
  /** \brief Quantidade de dados escritos na execução do comando (em KB) */
  const string COMMAND_BYTES_OUT_KB = "csbase_command_bytes_out_kb";
  /** \brief Quantidade de dados lidos do disco na execução do comando (em KB) */
  const string COMMAND_DISK_BYTES_READ_KB = "csbase_command_disk_bytes_read_kb";
  /** \brief Quantidade de dados escritos no disco na execução do comando (em KB) */
  const string COMMAND_DISK_BYTES_WRITE_KB = "csbase_command_disk_bytes_write_kb";
};

#endif
