blob: c4553c10c7af5637e6b49498229d42f7a44d35cc [file] [log] [blame]
Matteo Scandolod2044a42017-08-07 16:08:28 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
Scott Bakerc8bbe9e2018-01-16 17:48:59 -080017import argparse
Scott Baker268bc2a2017-03-03 18:02:12 -080018import os
19import sys
20import time
21
Scott Bakerde576422018-02-23 09:53:37 -080022from grpc_server import XOSGrpcServer
Scott Baker268bc2a2017-03-03 18:02:12 -080023
Sapan Bhatia06de76b2017-08-22 16:53:50 -040024from xosconfig import Config
25from multistructlog import create_logger
Scott Baker268bc2a2017-03-03 18:02:12 -080026
Sapan Bhatia06de76b2017-08-22 16:53:50 -040027log = create_logger(Config().get('logging'))
Matteo Scandolo6bc017c2017-05-25 18:37:42 -070028
Zack Williams73a12852018-09-05 15:33:35 -070029# create an single kafka producer connection for the core
30from xoskafka import XOSKafkaProducer
31XOSKafkaProducer.init()
32
Scott Bakerc8bbe9e2018-01-16 17:48:59 -080033def parse_args():
34 parser = argparse.ArgumentParser()
35 parser.add_argument("--model_status", dest="model_status", type=int, default=0, help="status of model prep")
36 parser.add_argument("--model_output", dest="model_output", type=file, default=None, help="file containing output of model prep step")
37 args = parser.parse_args()
38
39 if args.model_output:
40 args.model_output = args.model_output.read()
41 else:
42 args.model_output = ""
43
44 return args
45
Scott Bakerb06e3e02017-12-12 11:05:53 -080046def init_reaper():
47 reaper = None
48 try:
49 from reaper import ReaperThread
50 reaper = ReaperThread()
51 reaper.start()
52 except:
Scott Bakerc8bbe9e2018-01-16 17:48:59 -080053 log.exception("Failed to initialize reaper")
Scott Bakerb06e3e02017-12-12 11:05:53 -080054
55 return reaper
56
Scott Baker268bc2a2017-03-03 18:02:12 -080057if __name__ == '__main__':
Scott Bakerc8bbe9e2018-01-16 17:48:59 -080058 args = parse_args()
59
60 server = XOSGrpcServer(model_status = args.model_status,
61 model_output = args.model_output)
Scott Bakerb06e3e02017-12-12 11:05:53 -080062 server.start()
Matteo Scandolod9208552017-06-21 14:15:16 -070063
Scott Bakerc8bbe9e2018-01-16 17:48:59 -080064 if server.django_initialized:
65 reaper = init_reaper()
66 else:
67 log.warning("Skipping reaper as django is not initialized")
68 reaper = None
Scott Baker268bc2a2017-03-03 18:02:12 -080069
Sapan Bhatia06de76b2017-08-22 16:53:50 -040070 log.info("XOS core entering wait loop")
Scott Baker268bc2a2017-03-03 18:02:12 -080071 _ONE_DAY_IN_SECONDS = 60 * 60 * 24
72 try:
Scott Bakerb06e3e02017-12-12 11:05:53 -080073 while True:
74 if server.exit_event.wait(_ONE_DAY_IN_SECONDS):
75 break
Scott Baker268bc2a2017-03-03 18:02:12 -080076 except KeyboardInterrupt:
Sapan Bhatia06de76b2017-08-22 16:53:50 -040077 log.info("XOS core terminated by keyboard interrupt")
Scott Baker268bc2a2017-03-03 18:02:12 -080078
Scott Bakerb06e3e02017-12-12 11:05:53 -080079 server.stop()
Scott Bakerc8bbe9e2018-01-16 17:48:59 -080080
81 if reaper:
82 reaper.stop()