blob: fa4b3d4b1eb61b4bf4a91a3308b180e9df954422 [file] [log] [blame]
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +00001#!/usr/bin/python
2import os
3import sys
4import time
Benny Prijono4adead22010-08-16 12:33:52 +00005import datetime
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +00006import ccdash
7
Benny Prijonoa72cdca2010-08-17 14:53:09 +00008INTERVAL = 300
Benny Prijonoa10b3dd2010-08-23 09:16:03 +00009DELAY = 0
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000010
Benny Prijono20c26f02010-08-18 03:18:24 +000011def run_scenarios(scenarios, group):
12 # Run each scenario
13 rc = 0
14 for scenario in scenarios:
15 argv = []
16 argv.append("ccdash.py")
17 argv.append("scenario")
18 argv.append(scenario)
19 argv.append("--group")
20 argv.append(group)
21 thisrc = ccdash.main(argv)
22 if rc==0 and thisrc:
23 rc = thisrc
24 return rc
25
26
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000027def usage():
28 print """Periodically monitor working directory for Continuous and Nightly builds
29
30Usage:
31 run_continuous.py [options] scenario1.xml [scenario2.xml ...]
32
33options:
34 These are options which will be processed by run_continuous.py:
35
36 --delay MIN Delay both Continuous and Nightly builds by MIN minutes.
37 This is useful to coordinate the build with other build
38 machines. By default, Continuous build will be done right
39 after changes are detected, and Nightly build will be done
40 at 00:00 GMT. MIN is a float number.
41
42"""
43 sys.exit(1)
44
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000045if __name__ == "__main__":
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000046 if len(sys.argv)<=1 or sys.argv[1]=="-h" or sys.argv[1]=="--h" or sys.argv[1]=="--help" or sys.argv[1]=="/h":
47 usage()
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000048
49 # Splice list
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000050 scenarios = []
51 i = 1
52 while i < len(sys.argv):
53 if sys.argv[i]=="--delay":
54 i = i + 1
55 if i >= len(sys.argv):
56 print "Error: missing argument"
57 sys.exit(1)
58 DELAY = float(sys.argv[i]) * 60
59 print "Delay is set to %f minute(s)" % (DELAY / 60)
60 else:
61 # Check if scenario exists
62 scenario = sys.argv[i]
63 if not os.path.exists(scenario):
64 print "Error: file " + scenario + " does not exist"
65 sys.exit(1)
66 scenario.append(scenario)
67 print "Scenario %s added" % (scenario)
68 i = i + 1
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000069
Benny Prijonoa10b3dd2010-08-23 09:16:03 +000070 if len(scenarios) < 1:
71 print "Error: scenario is required"
72 sys.exit(1)
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000073
Benny Prijono20c26f02010-08-18 03:18:24 +000074 # Current date
75 utc = time.gmtime(None)
76 day = utc.tm_mday
77
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000078 # Loop foreva
79 while True:
80 argv = []
81
82 # Anything changed recently?
83 argv.append("ccdash.py")
84 argv.append("status")
85 argv.append("-w")
86 argv.append("../..")
87 rc = ccdash.main(argv)
88
Benny Prijono20c26f02010-08-18 03:18:24 +000089 utc = time.gmtime(None)
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +000090
Benny Prijono20c26f02010-08-18 03:18:24 +000091 if utc.tm_mday != day or rc != 0:
92 group = ""
93 if utc.tm_mday != day:
94 day = utc.tm_mday
95 group = "Nightly"
96 elif rc != 0:
97 group = "Continuous"
98 else:
99 group = "Experimental"
100 rc = run_scenarios(scenarios, group)
101 # Sleep even if something does change
102 print str(datetime.datetime.now()) + \
103 ": done running " + group + \
104 "tests, will check again in " + str(INTERVAL) + "s.."
105 time.sleep(INTERVAL)
106 else:
107 # Nothing changed
108 print str(datetime.datetime.now()) + \
109 ": No update, will check again in " + str(INTERVAL) + "s.."
110 time.sleep(INTERVAL)
111
Benny Prijonoa6b3e7c2010-08-16 12:18:20 +0000112