差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン最新のリビジョン両方とも次のリビジョン | ||
ja:documentation:08_technical_reference:07_anexo_console_extensions_development [2022/08/06 22:35] – [例] junichi | ja:documentation:08_technical_reference:07_anexo_console_extensions_development [2022/08/06 22:56] – [サブディレクトリ] junichi | ||
---|---|---|---|
行 262: | 行 262: | ||
==== ソースコード ==== | ==== ソースコード ==== | ||
- | < | + | < |
<?php | <?php | ||
/** | /** | ||
行 268: | 行 268: | ||
* ================================================== | * ================================================== | ||
* Copyright (c) 2005-2009 Artica Soluciones Tecnologicas | * Copyright (c) 2005-2009 Artica Soluciones Tecnologicas | ||
- | | + | * |
* This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | * modify it under the terms of the GNU General Public License | ||
行 277: | 行 277: | ||
* GNU General Public License for more details. | * GNU General Public License for more details. | ||
*/ | */ | ||
- | + | ||
/** | /** | ||
* Extension specific translation function | * Extension specific translation function | ||
行 306: | 行 306: | ||
*/ | */ | ||
| | ||
- | $item = ___($item); | + | $item = ___($item); |
} | } | ||
- | + | ||
/** | /** | ||
* The main function of module groups and the enter point to | * The main function of module groups and the enter point to | ||
行 314: | 行 314: | ||
*/ | */ | ||
function mainModuleGroups() { | function mainModuleGroups() { | ||
- | global $config; //the useful global var of Pandora Console, it has many data can you use | + | |
- | + | ||
- | //The big query | + | //The big query |
- | $sql = " | + | $sql = " |
- | FROM tagente_estado | + | FROM tagente_estado |
- | WHERE utimestamp != 0 AND id_agente IN | + | WHERE utimestamp != 0 AND id_agente IN |
- | (SELECT id_agente FROM tagente WHERE id_grupo = %d AND disabled IS FALSE) | + | (SELECT id_agente FROM tagente WHERE id_grupo = %d AND disabled IS FALSE) |
- | AND id_agente_modulo IN | + | AND id_agente_modulo IN |
- | (SELECT id_agente_modulo | + | (SELECT id_agente_modulo |
- | FROM tagente_modulo | + | FROM tagente_modulo |
- | WHERE id_module_group = %d AND disabled IS FALSE AND delete_pending IS FALSE) | + | WHERE id_module_group = %d AND disabled IS FALSE AND delete_pending IS FALSE) |
- | GROUP BY estado"; | + | GROUP BY estado"; |
- | + | ||
- | echo "< | + | echo "< |
- | + | ||
- | echo "< | + | echo "< |
- | + | ||
- | + | $agentGroups = get_user_groups ($config[' | |
- | $agentGroups = get_user_groups ($config[' | + | $modelGroups = get_all_model_groups(); |
- | $modelGroups = get_all_model_groups(); | + | array_walk($modelGroups, |
- | array_walk($modelGroups, | + | |
- | + | $head = $modelGroups; | |
- | $head = $modelGroups; | + | array_unshift($head, |
- | array_unshift($head, | + | |
- | + | // | |
- | // | + | $table = null; |
- | $table = null; | + | $table-> |
- | $table-> | + | $table-> |
- | $table-> | + | $table-> |
- | $table-> | + | |
- | + | //The content of table | |
- | //The content of table | + | $tableData = array(); |
- | $tableData = array(); | + | //Create rows and celds |
- | //Create rows and celds | + | foreach ($agentGroups as $idAgentGroup => $name) { |
- | foreach ($agentGroups as $idAgentGroup => $name) { | + | |
- | + | $row = array(); | |
- | $row = array(); | + | |
- | + | array_push($row, | |
- | array_push($row, | + | |
- | + | foreach ($modelGroups as $idModelGroup => $modelGroup) { | |
- | foreach ($modelGroups as $idModelGroup => $modelGroup) { | + | $query = sprintf($sql, |
- | $query = sprintf($sql, | + | $rowsDB = get_db_all_rows_sql ($query); |
- | $rowsDB = get_db_all_rows_sql ($query); | + | |
- | + | $states = array(); | |
- | $states = array(); | + | if ($rowsDB !== false) { |
- | if ($rowsDB !== false) { | + | foreach ($rowsDB as $rowDB) { |
- | foreach ($rowsDB as $rowDB) { | + | $states[$rowDB[' |
- | $states[$rowDB[' | + | } |
- | } | + | } |
- | } | + | |
- | + | $count = 0; | |
- | $count = 0; | + | foreach ($states as $idState => $state) { |
- | foreach ($states as $idState => $state) { | + | $count = $state; |
- | $count = $state; | + | } |
- | } | + | |
- | + | $color = ' | |
- | $color = ' | + | if ($count == 0) { |
- | if ($count == 0) { | + | $color = '# |
- | $color = '# | + | $alinkStart = ''; |
- | $alinkStart = ''; | + | $alinkEnd = ''; |
- | $alinkEnd = ''; | + | } |
- | } | + | else { |
- | else { | + | $alinkStart = '<a href=" |
- | $alinkStart = '<a href=" | + | '& |
- | '& | + | $alinkEnd = '</ |
- | $alinkEnd = '</ | + | |
- | + | if (array_key_exists(0, | |
- | if (array_key_exists(0, | + | $color = '# |
- | $color = '# | + | else { |
- | else { | + | if (array_key_exists(1, |
- | if (array_key_exists(1, | + | $color = '# |
- | $color = '# | + | else |
- | else | + | $color = '# |
- | $color = '# | + | } |
- | } | + | } |
- | } | + | |
- | + | array_push($row, | |
- | array_push($row, | + | '< |
- | '< | + | style=" |
- | style=" | + | height: 15px; |
- | height: 15px; | + | margin-left: |
- | margin-left: | + | text-align: center; padding-top: |
- | text-align: center; padding-top: | + | ' . $alinkStart . $count . ' modules' |
- | ' . $alinkStart . $count . ' modules' | + | } |
- | } | + | array_push($tableData, |
- | array_push($tableData, | + | } |
- | } | + | $table-> |
- | $table-> | + | |
- | + | print_table($table); | |
- | print_table($table); | + | |
- | + | echo "< | |
- | echo "< | + | "< |
- | "< | + | '< |
- | '< | + | <div style=" |
- | <div style=" | + | ___(" |
- | ___(" | + | '< |
- | '< | + | <div style=" |
- | <div style=" | + | ___(" |
- | ___(" | + | '< |
- | '< | + | ___(" |
- | ___(" | + | '< |
- | '< | + | ___(" |
- | ___(" | + | "</ |
- | "</ | + | "</ |
- | "</ | + | |
} | } | ||
- | + | ||
extensions_add_operation_menu_option(" | extensions_add_operation_menu_option(" | ||
extensions_add_main_function(' | extensions_add_main_function(' | ||
extensions_add_translation_string_function(' | extensions_add_translation_string_function(' | ||
?> | ?> | ||
+ | |||
</ | </ | ||
+ | |||
==== 説明 ==== | ==== 説明 ==== | ||
行 438: | 行 439: | ||
この例の場合、同じファイルに 3つの関数があります。しかし、共通のコードがあるのであれば、複数ファイルに分割する方が良いです(そして、拡張のサブディレクトリに保存します)。関数は次の通りです。 | この例の場合、同じファイルに 3つの関数があります。しかし、共通のコードがあるのであれば、複数ファイルに分割する方が良いです(そして、拡張のサブディレクトリに保存します)。関数は次の通りです。 | ||
- | * extensions_translation() 関数 | + | * '' |
- | * translate(& | + | * '' |
- | * mainModuleGroups() 関数\\ これは、拡張のコードで何行もあります。重要な部分のみ示します。 | + | * '' |
* 最初は、設定のグローバル変数へのアクセスです。この変数に、Pandora コンソールに関する多くの設定やデフォルト値が含まれます。 | * 最初は、設定のグローバル変数へのアクセスです。この変数に、Pandora コンソールに関する多くの設定やデフォルト値が含まれます。 | ||
- | * 2つ目の変数は、[[http:// | + | * 2つ目の変数は、[[https:// |
- | * 次に表示するためのいくつかの echo があります。 | + | * 次に表示するためのいくつかの |
* DB のデータを 1次元の 2つの配列に展開し、id がインデックスで、内容は列(モジュールグループと行(エージェントグループ)にタイトルです。 | * DB のデータを 1次元の 2つの配列に展開し、id がインデックスで、内容は列(モジュールグループと行(エージェントグループ)にタイトルです。 | ||
* モジュールグループ配列のタイトルを変換します。 | * モジュールグループ配列のタイトルを変換します。 | ||
* メタオブジェクトの $table を作成し、行を埋めて表示します。 | * メタオブジェクトの $table を作成し、行を埋めて表示します。 | ||
- | * foreach ループの前に、$table に、テーブルのヘッダとスタイルを定義します。 | + | * foreach ループの前に、'' |
* 最初のループは行のデータ用です。(それぞれのエージェントグループ) | * 最初のループは行のデータ用です。(それぞれのエージェントグループ) | ||
* 2つ目のループは、現在の行に対する列のデータ用です。(それぞれのモジュールグループ) | * 2つ目のループは、現在の行に対する列のデータ用です。(それぞれのモジュールグループ) | ||
* そして、それぞれのセルに、モジュールグループとエージェントグループの ID の 2つの数字が当てはまり、この 2つの数字を使ってデータベースクエリを実施し、データを取得します。 | * そして、それぞれのセルに、モジュールグループとエージェントグループの ID の 2つの数字が当てはまり、この 2つの数字を使ってデータベースクエリを実施し、データを取得します。 | ||
* 異なる種類のモニタ状態および、状態の数の合計の結果の配列を生成します。 | * 異なる種類のモニタ状態および、状態の数の合計の結果の配列を生成します。 | ||
- | * そして残りは、セルを html に整形する処理です。仕組みは簡単です。すべての状態の合計がゼロであれば、CSS の div で背景をグレーにします。もし、$states[[pandora: | + | * そして残りは、セルを html に整形する処理です。仕組みは簡単です。すべての状態の合計がゼロであれば、CSS の div で背景をグレーにします。もし、'' |
- | * 合計が 0 より大きければ、セルにリンクを加えます。 | + | * 合計が |
- | * 行を $table に保存し、foreach で繰り返します。 | + | * 行を |
* 表を表示します。 | * 表を表示します。 | ||
* 凡例とその他注意をページの下に表示します。 | * 凡例とその他注意をページの下に表示します。 | ||
=== API 呼び出し関数 === | === API 呼び出し関数 === | ||
- | これは、数行のコードです。このコードでは次のことを行います。 | ||
- | * 拡張を Pandora メニューへ挿入\\ **extensions_add_operation_menu_option(" | ||
- | * **' | ||
- | * **' | ||
- | * **' | ||
- | | + | There are only a few lines of code. The operations in these lines are: |
+ | |||
+ | 数行のコードです。この行で行う処理は次の通りです。 | ||
+ | |||
+ | * Insert the extension into Pandora FMS menu. | ||
+ | * And it's with the call | ||
+ | |||
+ | * 拡張を Pandora FMS メニューへ挿入 | ||
+ | * そして、呼び出し | ||
+ | |||
+ | < | ||
+ | extensions_add_operation_menu_option(" | ||
+ | |||
+ | </ | ||
+ | |||
+ | Where: | ||
+ | |||
+ | ここで、 | ||
+ | |||
+ | * **' | ||
+ | * **' | ||
+ | * **' | ||
+ | * Define the main function of this extension . \\ And it's with the call '' | ||
+ | * **' | ||
+ | |||
+ | * **' | ||
+ | * **' | ||
+ | * **' | ||
+ | | ||
* ' | * ' | ||
行 471: | 行 495: | ||
=== ディレクトリ構成 === | === ディレクトリ構成 === | ||
- | {{ wiki:Directory_extension_example.png? | + | |
- | 拡張のインストールはとても簡単です。なぜなら、Pandora コンソールは新たな拡張を検索し、それを見つけたらシステムに追加します。 | + | {{ :wiki:directory_extension_example.png }} |
- | 拡張のファイルすべてを Pandora コンソールをインストールした extension ディレクトリにコピーするだけです。ただし、**Pandora コンソールが拡張のファイルおよびサブディレクトリを読めるようにパーミッションを設定する**必要があります。 | + | |
+ | The instalation of extension is very easy, because the Pandora FMS Console search new extensions and add into system when new extension is found. You only copy all files of extensions into the directory extension in your [[: | ||
+ | |||
+ | 拡張のインストールはとても簡単です。なぜなら、Pandora | ||
+ | 拡張のファイルすべてを | ||
画面例では、extension は次のようなディレクトリ構造になっています。 | 画面例では、extension は次のようなディレクトリ構造になっています。 | ||
- | * module_groups | + | * '' |
- | * icon_menu.png | + | * '' |
- | * module_groups.php | + | * '' |
- | そして、例では extension ディレクトリは、/// | + | And the extension directory is for example in ''/ |
+ | |||
+ | そして、例では extension ディレクトリは、'' | ||
=== サブディレクトリ === | === サブディレクトリ === | ||
- | この場合、例では一つのサブディレクトリがあります。そして、通常、拡張は一つのサブディレクトリを持つ必要があります。サブディレクトリは、拡張のメインファイルと同じ名前です。この例のサブディレクトリには、アイコンファイル (icon_menu.png) のみがあります。このアイコンは、 Pandora メニューに表示されます。 | + | |
+ | In this case, the example has one subdirectory, | ||
+ | |||
+ | この場合、例では一つのサブディレクトリがあります。そして、通常、拡張は一つのサブディレクトリを持つ必要があります。サブディレクトリは、拡張のメインファイルと同じ名前です。この例のサブディレクトリには、アイコンファイル ('' | ||