[Ngms-svn] SVN-Commit: [54] [NMNetWalker] change the structure of the class

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 12月 8日 (火) 16:10:00 JST


Revision: 54
          http://sourceforge.jp/projects/ngms/svn/view?view=rev&revision=54
Author:   takayah
Date:     2009-12-08 16:10:00 +0900 (Tue, 08 Dec 2009)

Log Message:
-----------
[NMNetWalker] change the structure of the class

Added Paths:
-----------
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConf.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFacade.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFactory.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfMain.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfResult.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfType.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConf.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConfResult.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConf.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConfResult.scala

Removed Paths:
-------------
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiConfig.scala
    trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosConfig.scala

Added: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConf.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConf.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConf.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,21 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * 設定ファイルの生成を行うクラス
+ *
+ * @version $Id$
+ * @author
+ */
+private[nmnetwalker] abstract class AutoConf(val p: Map[String, String]) {
+    require((p != null) && (p.size >= 1), "invalid param")
+
+    protected val params: Map[String, String] = p
+
+    def parse(): Unit
+    def create(): AutoConfResult
+}
+


Property changes on: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConf.scala
___________________________________________________________________
Added: svn:keywords
   + Date Id

Added: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFacade.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFacade.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFacade.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,21 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * 自動設定結果を取得するクラス
+ * @version $Id$
+ * @author
+ */
+private[nmnetwalker] object AutoConfFacade {
+    import info.ngms.nmtree.NMDescription
+
+    def getConfig(autoConfType: AutoConfType.Value, params: Map[String, String]): AutoConfResult = {
+        val autoConf = AutoConfFactory.create(autoConfType, params);
+        autoConf.parse
+        autoConf.create
+    }
+}
+


Property changes on: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFacade.scala
___________________________________________________________________
Added: svn:keywords
   + Date Id

Added: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFactory.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFactory.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFactory.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,21 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * AutoConf を生成するクラス 
+ * @version $Id$
+ * @author
+ */
+private[nmnetwalker] object AutoConfFactory {
+    def create(autoConfType: AutoConfType.Value, params: Map[String, String]): AutoConf = {
+        autoConfType match {
+            case AutoConfType.NAGIOS => new NagiosAutoConf(params)
+            case AutoConfType.CACTI => new CactiAutoConf(params)
+            case _ => throw new IllegalArgumentException("invalid autoConfType")
+        }
+    }
+}
+


Property changes on: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfFactory.scala
___________________________________________________________________
Added: svn:keywords
   + Date Id

Added: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfMain.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfMain.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfMain.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,24 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ *  ネットワーク機器の設定などを行う
+ *  @version $Id$
+ *  @author
+ */
+object AutoConfMain {
+    /**
+     * メイン関数 	
+     */
+    def main(args : Array[String]) : Unit = {
+        val params = Map("nagiosdir" -> "/usr/local/nagios",
+                         "addr" -> "192.168.1.1",
+                         "hostname" -> "myname")
+
+        val autoConfResult = AutoConfFacade.getConfig(AutoConfType.NAGIOS, params)
+        autoConfResult.commit
+    }
+}


Property changes on: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfMain.scala
___________________________________________________________________
Added: svn:keywords
   + Date Id

Added: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfResult.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfResult.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfResult.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,16 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * 自動設定を行うクラス
+ *
+ * @version $Id$
+ * @author
+ */
+private[nmnetwalker] abstract class AutoConfResult {
+    def commit(): Unit
+}
+


Property changes on: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfResult.scala
___________________________________________________________________
Added: svn:keywords
   + Date Id

Added: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfType.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfType.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfType.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,16 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * AutoConf のタイプを表す Enumeration クラス
+ * @version $Id$
+ * @author
+ */
+object AutoConfType extends Enumeration {
+    val NAGIOS = Value("Nagios")
+    val CACTI = Value("Cacti")
+}
+


Property changes on: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/AutoConfType.scala
___________________________________________________________________
Added: svn:keywords
   + Date Id

Copied: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConf.scala (from rev 51, trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiConfig.scala)
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConf.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConf.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,48 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * Cacti の設定ファイルを生成させるクラス
+ *
+ * @version $Id$
+ * @author
+ */
+private[nmnetwalker] class CactiAutoConf(val pa: Map[String, String]) extends AutoConf(pa) {
+    // param key
+    val KEY_CACTI_DIR: String = "cactidir"
+    val KEY_ADDR: String = "addr"
+    val KEY_HOSTNAME: String = "hostname"
+
+    // param value
+    private var cactidir: String = null
+    private var addr: String = null
+    private var hostname: String = null
+
+    private var initialized: Boolean = false
+
+    override def parse(): Unit = {
+        val cactidirStr = params(KEY_CACTI_DIR)
+        require((cactidirStr != null) && (cactidirStr.length() >= 1), "cactidir is null")
+        this.cactidir = cactidirStr
+
+        val addrStr = params(KEY_ADDR)
+        require((addrStr != null) && (addrStr.length() >= 1), "addr is null")
+        this.addr = addrStr
+
+        val hostnameStr = params(KEY_HOSTNAME)
+        require((hostnameStr != null) && (hostnameStr.length() >= 1), "hostname is null")
+        this.hostname = hostnameStr
+    }
+
+    override def create(): AutoConfResult = {
+       if (!initialized) {
+            parse
+       }
+
+       new CactiAutoConfResult(cactidir, addr, hostname)
+    }
+}
+

Added: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConfResult.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConfResult.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConfResult.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,66 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * Cacti の設定を反映させるクラス
+ *
+ * @version $Id$
+ * @author
+ */
+private[nmnetwalker] class CactiAutoConfResult(cactidir: String,
+                                               addr: String,
+                                               hostname: String) extends AutoConfResult {
+    def commit(): Unit = {
+        addDevice()
+        val hostid = getHostID()
+        if (hostid == "") { // addDevice fail?
+            // FIXME
+            // 何の Exception を throw するかを再考する必要がある。
+            throw new RuntimeException("hostid not found\n")
+        } else {
+            addGraph(hostid)
+        }
+    }
+
+    // php add_device.php --description=hostname --ip=address --template=1 \
+    //                          --avail=snmp --version=2 --community=public
+    //
+    // host-template: Generic SNMP-enabled Host
+    private def addDevice() = {
+        val cmd =
+            "php %s/cli/add_device.php --description=%s --ip=%s ".format(cactidir, hostname, addr) +
+            "--quiet --template=1 --avail=snmp --version=2 --community=public"
+        val proc = new ExecCmd(cmd)
+        proc.exec
+    }
+
+    private def getHostID() = {
+        val cmd = "php %s/cli/add_graphs.php --list-hosts".format(cactidir)
+        val proc = new ExecCmd(cmd)
+        val result = proc.exec
+        val lines = result.split("\\n").filter(_.contains(addr)).toList
+        if (lines.isEmpty) {
+            ""
+        } else {
+            lines.head.split("\\s+").toList.head
+        }
+    }
+
+    //php add_graphs.php --graph-type=ds --graph-template-id=2 --host-id=?? \
+    //                   --snmp-query-id=1 --snmp-query-type-id=13 \
+    //                   --snmp-field=ifOperStatus --snmp-value=Up
+    // graph-template-id:  Interface - Traffic (bits/sec)
+    // snmp-query-id:      SNMP - Interface Statistics
+    // snmp-query-type-id: In/Out Bits
+    private def addGraph(hostid: String) = {
+        val cmd = "php %s/cli/add_graphs.php ".format(cactidir) +
+                  "--graph-type=ds --graph-template-id=2 --host-id=%s ".format(hostid) +
+                  "--quiet --snmp-query-id=1 --snmp-query-type-id=13 --snmp-field=ifOperStatus --snmp-value=Up"
+        val proc = new ExecCmd(cmd)
+        proc.exec
+    }
+}
+


Property changes on: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiAutoConfResult.scala
___________________________________________________________________
Added: svn:keywords
   + Date Id

Deleted: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiConfig.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiConfig.scala	2009-12-07 09:06:48 UTC (rev 53)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/CactiConfig.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -1,63 +0,0 @@
-/*
- *  Next Generation Management System Project
- *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
- */
-package info.ngms.nmnetwalker
-
-/**
- * Cacti の自動設定を行うクラス
- *
- * @version $Id$
- * @author
- */
-
-class CactiConfig {
-    val cactiDir = "/usr/local/cacti"
-
-    // php add_device.php --description=hostname --ip=address --template=1 \
-    //                          --avail=snmp --version=2 --community=public
-    //
-    // host-template: Generic SNMP-enabled Host
-   
-    def addDevice(hostname:String, address:String) = {
-        val cmd =
-            "php %s/cli/add_device.php --description=%s --ip=%s ".format(cactiDir, hostname, address) +
-            "--quiet --template=1 --avail=snmp --version=2 --community=public"
-        val proc = new ExecCmd(cmd)
-        proc.exec
-    }
-
-    def getHostID(address:String) = {
-        val cmd = "php %s/cli/add_graphs.php --list-hosts".format(cactiDir)
-        val proc = new ExecCmd(cmd)
-        val result = proc.exec
-        val lines = result.split("\\n").filter(_.contains(address)).toList
-        if (lines.isEmpty)
-            ""
-        else
-            lines.head.split("\\s+").toList.head
-    }
-
-    //php add_graphs.php --graph-type=ds --graph-template-id=2 --host-id=?? \
-    //                   --snmp-query-id=1 --snmp-query-type-id=13 \
-    //                   --snmp-field=ifOperStatus --snmp-value=Up
-    // graph-template-id:  Interface - Traffic (bits/sec)
-    // snmp-query-id:      SNMP - Interface Statistics
-    // snmp-query-type-id: In/Out Bits
-    def addGraph(hostid:String) = {
-        val cmd = "php %s/cli/add_graphs.php ".format(cactiDir) +
-                  "--graph-type=ds --graph-template-id=2 --host-id=%s ".format(hostid) +
-                  "--quiet --snmp-query-id=1 --snmp-query-type-id=13 --snmp-field=ifOperStatus --snmp-value=Up"
-        val proc = new ExecCmd(cmd)
-        proc.exec
-    }
-}
-
-/*
-val cmd = new ExecCmd("date")
-cmd.setEnv("LANG", "C")
-cmd.setDir("/tmp")
-//cmd.setEnv("LANG", "ja_JP.UTF-8")
-val result = cmd.exec
-println(result)
-*/

Copied: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConf.scala (from rev 51, trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosConfig.scala)
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConf.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConf.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,64 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * Nagio の設定ファイルを生成させるクラス
+ *
+ * @version $Id$
+ * @author
+ */
+private[nmnetwalker] class NagiosAutoConf(val pa: Map[String, String]) extends AutoConf(pa) {
+    // param key
+    val KEY_NAGIOS_DIR: String = "nagiosdir"
+    val KEY_ADDR: String = "addr"
+    val KEY_HOSTNAME: String = "hostname"
+
+    // param value
+    private var nagiosdir: String = null
+    private var addr: String = null
+    private var hostname: String = null
+
+    private var initialized: Boolean = false
+
+    override def parse(): Unit = {
+        val nagiosdirStr = params(KEY_NAGIOS_DIR)
+        require((nagiosdirStr != null) && (nagiosdirStr.length() >= 1), "nagiosdir is null")
+        this.nagiosdir = nagiosdirStr
+
+        val addrStr = params(KEY_ADDR)
+        require((addrStr != null) && (addrStr.length() >= 1), "addr is null")
+        this.addr = addrStr
+
+        val hostnameStr = params(KEY_HOSTNAME)
+        require((hostnameStr != null) && (hostnameStr.length() >= 1), "hostname is null")
+        this.hostname = hostnameStr
+    }
+
+    override def create(): AutoConfResult = {
+        if (!initialized) {
+            parse
+        }
+
+        // FIXME
+        // 将来的にテンプレートは NMTree から読み出すようにする。
+        val fmt = """define host {
+        use             NGMS_host
+        host_name       %s
+        alias           %s
+        address         %s
+}
+
+define service {
+        use             NGMS_service_ping
+        host_name       %s
+}         
+"""     
+        val conf = fmt.format(fmt, hostname, hostname, addr, hostname)
+
+        new NagiosAutoConfResult(nagiosdir, hostname, conf)
+    }
+}
+

Added: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConfResult.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConfResult.scala	                        (rev 0)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConfResult.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -0,0 +1,33 @@
+/*
+ *  Next Generation Management System Project
+ *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
+ */
+package info.ngms.nmnetwalker
+
+/**
+ * Nagio の設定を反映させるクラス
+ *
+ * @version $Id$
+ * @author
+ */
+private[nmnetwalker] class NagiosAutoConfResult(nagiosdir: String,
+                                                hostname: String,
+                                                conf: String) extends AutoConfResult {
+    import scala.io.Source
+
+    def commit(): Unit = {
+        // FIXME
+        val filename = "%s/etc/NGMS/%s.cfg".format(nagiosdir, hostname)
+        val file = new java.io.FileWriter(filename)
+        file.write(conf)
+        file.close
+
+        val lockFile = "%s/var/nagios.lock".format(nagiosdir)
+        val pid = Source.fromFile(lockFile).getLines.mkString.trim
+        val cmd = "kill -1 %s".format(pid)
+        printf("send HUP signal to Nagios: %s\n",cmd)
+        val proc = new ExecCmd(cmd)
+        proc.exec
+    }
+}
+


Property changes on: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosAutoConfResult.scala
___________________________________________________________________
Added: svn:keywords
   + Date Id

Deleted: trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosConfig.scala
===================================================================
--- trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosConfig.scala	2009-12-07 09:06:48 UTC (rev 53)
+++ trunk/source/NMNetWalker/src/info/ngms/nmnetwalker/NagiosConfig.scala	2009-12-08 07:10:00 UTC (rev 54)
@@ -1,112 +0,0 @@
-/*
- *  Next Generation Management System Project
- *  Copyright(c) 2009, NGMS Project Team All Rights Reserved.
- */
-package info.ngms.nmnetwalker
-
-/**
- * Nagios の自動設定を行うクラス
- *
- * @version $Id$
- * @author
- */
-
-import scala.io.Source
-import java.net.InetAddress
-
-class NagiosConfig {
-    val NagiosDir = "/usr/local/nagios"
-
-    def writeConfig(hostname:String, addr:String) = {
-        val fmt = """define host {
-        use             NGMS_host
-        host_name       %s
-        alias           %s
-        address         %s
-}
-
-define service {
-        use             NGMS_service_ping
-        host_name       %s
-}
-"""
-        printf(fmt, hostname, hostname, addr, hostname)
-        val filename = "%s/etc/NGMS/%s.cfg".format(NagiosDir, hostname)
-        val file = new java.io.FileWriter(filename)
-        file.write(fmt.format(hostname, hostname, addr, hostname))
-        file.close
-    }
-
-    def sendHUP = {
-        val lockFile = "%s/var/nagios.lock".format(NagiosDir)
-        val pid = Source.fromFile(lockFile).getLines.mkString.trim
-        val cmd = "kill -1 %s".format(pid)
-        printf("send HUP signal to Nagios: %s\n",cmd)
-        val proc = new ExecCmd(cmd)
-        proc.exec
-    }
-}
-
-/*
-val cfg = new NagiosConfig
-cfg.writeConfig("myname", "192.168.1.1")
-cfg.sendHUP
-*/
-
-/* Template file
-#
-# for NGMS auto config
-#
-
-#
-# host
-#
-define host {
-        name                    NGMS_host_common
-        check_command           check-host-alive
-        max_check_attempts      4
-        contact_groups          admins
-        notification_interval   60
-        register                0
-}
-
-define host {
-        use                     NGMS_host_common
-        name                    NGMS_host
-        check_period            24x7
-        notification_period     24x7
-        notification_options    d,u,r
-        register                0
-}
-
-define host {
-        use                     NGMS_host_common
-        name                    NGMS_switch
-        check_period            24x7
-        notification_period     24x7
-        notification_options    d,r
-        register                0
-}
-
-#
-# service
-#
-define service {
-        name                    NGMS_service_common
-        max_check_attempts      4
-        check_interval          5
-        retry_interval          2
-        check_period            24x7
-        notification_period     24x7
-        contact_groups          admins
-        register                0
-}
-
-define service {
-        use                     NGMS_service_common
-        name                    NGMS_service_ping
-        service_description     PING
-        check_command           check_ping!100.0,20%!500.0,60%
-        register                0
-}
-*/




Ngms-svn メーリングリストの案内
Back to archive index