You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2016/12/19 13:31:54 UTC

svn commit: r1775086 - in /uima/uima-ducc/trunk/src/main: admin.future/q_processes admin/q_processes

Author: degenaro
Date: Mon Dec 19 13:31:54 2016
New Revision: 1775086

URL: http://svn.apache.org/viewvc?rev=1775086&view=rev
Log:
UIMA-5175 DUCC move undocumented admin/q_processes to admin.future

Added:
    uima/uima-ducc/trunk/src/main/admin.future/q_processes   (with props)
Removed:
    uima/uima-ducc/trunk/src/main/admin/q_processes

Added: uima/uima-ducc/trunk/src/main/admin.future/q_processes
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin.future/q_processes?rev=1775086&view=auto
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin.future/q_processes (added)
+++ uima/uima-ducc/trunk/src/main/admin.future/q_processes Mon Dec 19 13:31:54 2016
@@ -0,0 +1,171 @@
+#!/usr/bin/env python
+# -----------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# -----------------------------------------------------------------------
+
+
+import os
+import sys
+import subprocess
+import datetime
+import getopt
+import time
+
+import db_util
+
+from ducc_util  import DuccUtil
+
+class DuccRmQProcesses(DuccUtil):
+
+    def usage(self, *msg):
+        if ( msg[0] != None ):
+            print ' '.join(msg)
+        print 'Usage:'
+        print '    q_processes options'
+        print ''
+        print 'Where options include:'
+        print '    -j --job jobid  sho all processes for this job'
+        print '    -n --node       show all processes on a node'
+        print '    -f --from date  include only process since this date'
+        print '    -t --to   date  include processes only up to this date'
+        print ''
+        print 'Notes:'
+        print '    Omit -f and -t to get all processes.'
+        print ''
+        print '    If -f OR -t is specified, you MUST specifiy a node (-n) as well.'
+        print ''
+        print ''
+        print '    Date formats:'
+        print '       mm/dd/yy            Use this to specify everything on a given day'
+        print '       mm/dd/yy.hh:mm      Use this to specify a specific hour and minute.'
+        print '                           Hours use the military (24-hour) clock.'
+        print ''
+        print 'Examples:'
+        print ''
+        print '    Show all work on bluejbob on Feb 15 2015 between noon and 4PM'
+        print '        q_processes --node bluejbob --from 2/14/15.12:00 --to 2/14/15.16:00'
+        print ''
+        print '    Show all history for job 1234'
+        print '        q_processes --job 1234'
+        print ''
+        print '    Show history for job 1234 on node bluebob'
+        print '        q_processes --job 1234 --node bluebob'
+
+        sys.exit(0)
+
+
+    def parse_date(self, dat):
+        if ( '.' in dat ):
+            fmt = '%m/%d/%y.%H:%M'
+        else:
+            fmt = '%m/%d/%y'
+
+        d = datetime.datetime.strptime(dat, fmt)
+        return int(time.mktime(d.timetuple()))*1000       
+
+    def get_date(self, dat):
+        return datetime.datetime.fromtimestamp(dat)        
+
+    def main(self, argv):
+
+        node = None
+        fromt = None
+        tot  = None
+        jobid = None
+        conjunction = 'WHERE'
+
+        print 'argv', argv
+        try:
+            opts, args = getopt.getopt(argv, 'f:j:n:t:h?', ['from=', 'to=', 'job=', 'node=', 'help', ])
+        except:
+            self.usage("Invalid arguments " + ' '.join(argv))
+
+            
+        for ( o, a ) in opts:
+            if o in ('-n', '--node'):
+                node = a
+            elif o in ('-f', '--from'):
+                fromt = self.parse_date(a)
+            elif o in ('-t', '--to'):
+                tot = self.parse_date(a)
+            elif o in ('-j', '--job'):
+                jobid = a
+            elif o in ('-h', '-?', '--help'):
+                self.usage(None)
+
+
+        if ( ( fromt != None ) and ( tot != None ) and ( node == None ) ):
+            self.usage("Node must be specified when a date range is specified.")
+
+        query = ['select * from ducc.processes']
+        if ( node != None ):
+            query.append(conjunction)
+            conjunction = 'AND'
+            query.append("node='" + node + "'")
+
+            
+        if ( fromt != None ):
+            query.append(conjunction)
+            conjunction = 'AND'
+            query.append("start > " + str(fromt))
+
+        if ( jobid != None ):
+            query.append(conjunction)
+            conjunction = 'AND'
+            query.append("job_id = " + jobid)
+
+        if ( tot != None ):
+            if ( fromt == None ):
+                usage("--from must be specified if --to is also specified.")
+            query.append(conjunction)
+            conjunction = 'AND'
+            query.append("stop < " + str(tot))
+
+        if ( fromt != None ):
+            query.append("ALLOW FILTERING")
+            
+        query = '"' + ' '.join(query) + '"'
+        DH = self.DUCC_HOME
+        dbn = self.ducc_properties.get('ducc.database.host')
+
+        CMD = [DH + '/cassandra-server/bin/cqlsh', dbn, '-u', 'guest', '-p', 'guest', '-e', query]
+        CMD = ' '.join(CMD)
+        print CMD
+
+        lines = []
+        proc = subprocess.Popen(CMD, bufsize=0, stdout=subprocess.PIPE, shell=True)
+        for line in proc.stdout:
+            # print '[]', line.strip()
+            lines.append(line)
+
+
+        header, lines = db_util.parse(lines, 'job_id')
+        for line in lines:
+            line['start'] = str(self.get_date(int(line['start'])/1000))
+            line['stop']  = str(self.get_date(int(line['stop'])/1000))
+
+        db_util.format(header, lines)
+
+        return
+            
+
+if __name__ == "__main__":
+    stopper = DuccRmQProcesses()
+    stopper.main(sys.argv[1:])
+
+    

Propchange: uima/uima-ducc/trunk/src/main/admin.future/q_processes
------------------------------------------------------------------------------
    svn:executable = *