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