Re: Jboss module

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Luca Foppiano wrote:
Hi, this is jboss module with git patch format.

ATM it can monitor jboss istances, as explained few day ago :)

Luca

Very cool. This looks very good, I'll apply it shortly. Can you add some notes to the Wiki along with the other modules on how someone would use this?

Generally I like to include examples of what it looks like being used from the command line, as well as Python.

If anyone else who uses JBoss would like to comment/test please do.

Thanks again!!

--Michael



---
 func/minion/modules/jboss.py |  243
++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 243 insertions(+), 0 deletions(-)
 create mode 100644 func/minion/modules/jboss.py

diff --git a/func/minion/modules/jboss.py b/func/minion/modules/jboss.py
new file mode 100644
index 0000000..b7664a5
--- /dev/null
+++ b/func/minion/modules/jboss.py
@@ -0,0 +1,243 @@
+#
+# Copyright 2008 +# Luca Foppiano <lfoppiano@xxxxxxxxxxxxx>
+# Simone Pucci <spucci@xxxxxxxxxxxxx>
+# Byte-code srl www.byte-code.com
+#
+# This software may be freely redistributed under the terms of the GNU
+# general public license.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+import func_module
+import sub_process
+import codes +import process
+import networktest
+
+class JBoss(func_module.FuncModule):
+    version = "0.0.1"
+    api_version = "0.0.1"
+    description = "JBoss monitoring and control module"
+
+
+    def version(self):
+        """
+            Return jboss version
+ TODO: implementation + """
+
+	return "version"
+
+
+    def status(self):
+        """
+            Get jboss information
+            (istance name, ports, bind address, pid)
+ """ + processo = process.ProcessModule() + results = processo.info("ax") +
+        output = []
+        for items in results:
+            if "-Dprogram.name=run.sh" in items:
+                for item in items:
+                    if "java" in item:
+                        java = True
+
+                if java == True:
+                    if items.__contains__("-c"):
+                        istance = items[items.index("-c")+1]
+                    else:
+                        istance = None
+
+                    if items.__contains__("-b"):
+                        address = items[items.index("-b")+1]
+                    else:
+                        address = None
+
+                    output.append((int(items[0]),istance,address,[]))
+
+        # Retrieve information about network (netstat -tupln)
+
+	net_status = networktest.NetworkTest()
+	results = net_status.netstat("-tupln")
+
+        debug = []
+        for string in results:#netstat_list:
+            address = None
+            port = None
+            pid = None
+
+            try:
+                address_port = string[3]
+                pid_name = string[6]
+            except:
+                address_port = None
+                pid_name = None
+
+            if address_port != None:
+                try:
+                    address = string[3].split(":")[0]
+                    port =  int(string[3].split(":")[1])
+                except:
+                    address = None
+                    port = None
+
+            if pid_name != None:
+                try:
+                    pid = int(pid_name.split("/")[0])
+                except:
+                    pid = None
+ + if pid != None:
+                for data in output:
+                    debug.append(data)
+                    if data[0] == pid:
+                        #verify address
+                        if address != None:
+                            if data[2] == address:
+                                data[3].append(port)
+
+ + return output
+
+
+    def check(self, status=None):
+        """
+            Check if jboss istances works, controls:
+                * check if istance listen on ports
+
+            Return values:
+                - istance up but not listen = (-1, istances with
problem)
+ - OK = (0, []) + """ + if(status == None):
+            data = self.status()
+        else:
+            data = status
+
+        result = []
+        code = 0
+        for item in data:
+            if len(item[3]) == 0:
+                code = -1
+                result.append(item)
+ + return (code, result)
+
+
+    def search_by_port(self, port, status=None):
+        """
+            Search istance by listening port
+        """
+        if(status == None):
+            data = self.status()
+        else:
+            data = status
+
+        founded = []
+
+        for item in data:
+            for ports in item[3]:
+                if port == ports:
+                    founded.append(item)
+ + return founded
+
+
+    def search_by_istance(self, istance, status=None):
+        """
+            Search istance by istance name
+        """
+        if(status == None):
+            data = self.status()
+        else:
+            data = status
+
+        founded = []
+
+        for item in data:
+            if item[1] == istance:
+                founded.append(item)
+ + return founded
+
+    def search_by_address(self, address, status=None):
+        """
+            Search istance by bind address
+        """
+        if(status == None):
+            data = self.status()
+        else:
+            data = status
+
+        founded = []
+
+        for item in data:
+            if item[2] == address:
+                founded.append(item)
+ + return founded
+
+'''
+    def start(self, address="127.0.0.1", istance="default"):
+        """
+            Start a jboss istance
+        """
+        jboss_path="/var/lib/jboss-4.2.2.GA"
+        jboss_run_path=jboss_path+"/bin/run.sh"
+        status=self.status()
+
+        if len(self.search_by_address(address=address,
status=status)) != 0:
+            return "Another istances listening on this address, "
+
+        if len(self.search_by_istance(istance=istance,
status=status)) != 0:
+            return result + str("This istances is just istanced")
+ + arguments = boss_run_path+" -c "+istance+" -b "+address
+        cmd = sub_process.Popen(["/bin/sh", arguments],
executable="/bin/sh", + stdout=sub_process.PIPE, + stderr=sub_process.PIPE,
+                                shell=False)
+
+        data, error = cmd.communicate()
+
+        if error and error[:7] != "Warning":
+            raise codes.FuncException(error.split('\n')[0])
+
+        return "OK, instance "+ istance +"started on address "+address
+
+    def stop(self, address="127.0.0.1"):
+        """
+            Stop a jboss istance, now use a standarda JNDI port
+            1099. By default stop che localhost bind istance
+            TODO: give more flexibility
+        """
+        jboss_path="/var/lib/jboss-4.2.2.GA"
+        jboss_sd_path=jboss_path+"/bin/shutdown.sh"
+        data = self.search_by_address("127.0.0.1")
+
+        if len(data) == 0:
+            return "Istance on "+ address +" not running"
+ + arguments = " -s jnp://"+address+":1099"
+        exe = "/bin/sh "+jboss_sd_path
+
+ cmd = sub_process.Popen([exe, arguments], executable=exe, + stdout=sub_process.PIPE, + stderr=sub_process.PIPE,
+                            shell=False)
+
+        data, error = cmd.communicate()
+
+        if error and error[:7] != "Warning":
+            raise codes.FuncException(error.split('\n')[0])
+
+        return "OK, stopped istance listening address "+address
+
+''' +

_______________________________________________
Func-list mailing list
Func-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/func-list

[Index of Archives]     [Fedora Users]     [Linux Networking]     [Fedora Legacy List]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux