[icinga-checkins] icinga.org: icingaweb2-module-director/feature/icinga-legacy-config-13049: DatafieldTable: provide usage summary

git at icinga.org git at icinga.org
Tue Nov 22 13:22:47 CET 2016


Module: icingaweb2-module-director
Branch: feature/icinga-legacy-config-13049
Commit: 46aac60c7d5713155904233b421c252e328908ac
URL:    https://git.icinga.org/?p=icingaweb2-module-director.git;a=commit;h=46aac60c7d5713155904233b421c252e328908ac

Author: Thomas Gelf <thomas at gelf.net>
Date:   Fri Nov 18 15:40:06 2016 +0100

DatafieldTable: provide usage summary

fixes #13249

---

 application/tables/DatafieldTable.php |   95 +++++++++++++++++++++++++++++----
 1 file changed, 85 insertions(+), 10 deletions(-)

diff --git a/application/tables/DatafieldTable.php b/application/tables/DatafieldTable.php
index 7b8c7a3..4964b29 100644
--- a/application/tables/DatafieldTable.php
+++ b/application/tables/DatafieldTable.php
@@ -3,6 +3,8 @@
 namespace Icinga\Module\Director\Tables;
 
 use Icinga\Module\Director\Web\Table\QuickTable;
+use Zend_Db_Adapter_Abstract as ZfDbAdapter;
+use Zend_Db_Select as ZfDbSelect;
 
 class DatafieldTable extends QuickTable
 {
@@ -13,11 +15,13 @@ class DatafieldTable extends QuickTable
     public function getColumns()
     {
         return array(
-            'id'          => 'f.id',
-            'varname'     => 'f.varname',
-            'caption'     => 'f.caption',
-            'description' => 'f.description',
-            'datatype'    => 'f.datatype',
+            'id'              => 'df.id',
+            'varname'         => 'df.varname',
+            'caption'         => 'df.caption',
+            'description'     => 'df.description',
+            'datatype'        => 'df.datatype',
+            'assigned_fields' => 'SUM(used_fields.cnt)',
+            'assigned_vars'   => 'SUM(used_vars.cnt)',
         );
     }
 
@@ -30,16 +34,87 @@ class DatafieldTable extends QuickTable
     {
         $view = $this->view();
         return array(
-            'caption'     => $view->translate('Label'),
-            'varname'     => $view->translate('Field name'),
+            'caption'         => $view->translate('Label'),
+            'varname'         => $view->translate('Field name'),
+            'assigned_fields' => $view->translate('# Used'),
+            'assigned_vars'   => $view->translate('# Vars'),
         );
     }
 
     public function getBaseQuery()
     {
-        return $this->db()->select()->from(
-            array('f' => 'director_datafield'),
+        $db = $this->db();
+        $fieldTypes = array('command', 'host', 'notification', 'service', 'user');
+        $varsTypes  = array('command', 'host', 'notification', 'service', 'service_set', 'user');
+
+        $fieldsQueries = array();
+        foreach ($fieldTypes as $type) {
+            $fieldsQueries[] = $this->makeDatafieldSub($type, $db);
+        }
+
+        $varsQueries = array();
+        foreach ($varsTypes as $type) {
+            $varsQueries[] = $this->makeVarSub($type, $db);
+        }
+
+        return $db->select()->from(
+            array('df' => 'director_datafield'),
+            array()
+        )->joinLeft(
+            array('used_fields' => $db->select()->union($fieldsQueries, ZfDbSelect::SQL_UNION_ALL)),
+            'used_fields.datafield_id = df.id',
             array()
-        )->order('caption ASC');
+        )->joinLeft(
+            array('used_vars' => $db->select()->union($varsQueries, ZfDbSelect::SQL_UNION_ALL)),
+            'used_vars.varname = df.varname',
+            array()
+        )->group('df.id')->group('df.varname')->order('caption ASC');
+    }
+
+    public function count()
+    {
+        $db = $this->db();
+        return $db->fetchOne(
+            $db->select()->from(
+                array('sub' => $this->getBaseQuery()->columns($this->getColumns())),
+                'COUNT(*)'
+            )
+        );
+    }
+
+    /**
+     * @param $type
+     * @param ZfDbAdapter $db
+     *
+     * @return ZfDbSelect
+     */
+    protected function makeDatafieldSub($type, ZfDbAdapter $db)
+    {
+        return $db->select()
+            ->from(
+                sprintf('icinga_%s_field', $type),
+                array(
+                    'cnt' => 'COUNT(*)',
+                    'datafield_id'
+                )
+            )->group('datafield_id');
+    }
+
+    /**
+     * @param $type
+     * @param ZfDbAdapter $db
+     *
+     * @return ZfDbSelect
+     */
+    protected function makeVarSub($type, ZfDbAdapter $db)
+    {
+        return $db->select()
+            ->from(
+                sprintf('icinga_%s_var', $type),
+                array(
+                    'cnt' => 'COUNT(*)',
+                    'varname'
+                )
+            )->group('varname');
     }
 }



More information about the icinga-checkins mailing list