File: resume.py

package info (click to toggle)
ecflow 5.15.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 51,868 kB
  • sloc: cpp: 269,341; python: 22,756; sh: 3,609; perl: 770; xml: 333; f90: 204; ansic: 141; makefile: 70
file content (81 lines) | stat: -rw-r--r-- 3,250 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env python2.7
#////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
# Name        :
# Author      : Avi
# Revision    : $Revision: #10 $
#
# Copyright 2009- ECMWF.
# This software is licensed under the terms of the Apache Licence version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
# In applying this licence, ECMWF does not waive the privileges and immunities
# granted to it by virtue of its status as an intergovernmental organisation
# nor does it submit to any jurisdiction.
#////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
import ecflow
import argparse # for argument parsing     
import sys

if __name__ == "__main__":
    
    DESC = """Will resume any suspended 'node' who name matches input
              Usage:
                Example1: resume all suspended node whose name matches 'fred' for suite grib_api
                   resume.py --host cca --port 4141 --suite grib_api --name fred
            """    
    PARSER = argparse.ArgumentParser(description=DESC,  
                                     formatter_class=argparse.RawDescriptionHelpFormatter)
    PARSER.add_argument('--host', default="localhost",   
                        help="The name of the host machine, defaults to 'localhost'")
    PARSER.add_argument('--port', default="3141",   
                        help="The port on the host, defaults to 3141")
    PARSER.add_argument('--suite',   
                        help="The name of the suite")
    PARSER.add_argument('--name', default="install",   
                        help="The name of the node")
    ARGS = PARSER.parse_args()
    print(ARGS)    
     
    # ===========================================================================
    CL = ecflow.Client(ARGS.host, ARGS.port)
    try:
        CL.ping() 

        # get the incremental changes, and merge with defs stored on the Client 
        CL.sync_local()
        
        # check to see if definition exists in the server
        defs = CL.get_defs()
        if len(defs) == 0 :
            print("No suites found, exiting...")
            sys.exit(0) 
         
        paths_list = []
        node_vec = defs.get_all_nodes()
        for node in node_vec:
            if node.name() != ARGS.name: continue
            if node.get_dstate() != ecflow.DState.suspended: continue

            path = node.get_abs_node_path()
            paths = path.split('/')
            if paths[1] == ARGS.suite:
                paths_list.append(path) 
                
        if len(paths_list) > 0:
            CL.resume(paths_list)

#        # requires ecflow >= 4.0.8
#         suite = defs.find_suite(ARGS.suite)
#         if suite is not None:
#             paths_list = []
#             node_vec = suite.get_all_nodes()
#             for node in node_vec:
#                 if node.name() == ARGS.name and node.get_dstate() == DState.SUSPENDED:
#                     paths_list.append(node.get_abs_node_path())
# 
#             print paths_list
#             if len(paths_list) > 0:
#                  CL.resume(paths_list)
        
    except RuntimeError as ex:
        print("Error: " + str(ex))
        print("Check host and port number are correct.")