Fix bad path for PTP configuration files
The PTP tracking container ("notificationservice-base") used hard-coded path in the reference to ptp4l, phc2sys and ts2phc configuration files, which led to bad initialization in a Debian environment (regardless the container is CentOS-based, since the path is mapped to the host). This change tests for the correct path, either in ./linuxptp/ptpinstance (Debian) or ./ptpinstance (CentOS). It also fixes an issue when there is no PHC interface defined, neither in the command line or in the phc2sys configuration file. BONUS: The logging helper of location service was fixed to properly log the messages like done already for the other images (notification server and client). Logging level can now be set also for this container. Test Plan: PASS: Built and tested new image for notificationservice-base. Closes-Bug: #1994192 Signed-off-by: Douglas Henrique Koerich <douglashenrique.koerich@windriver.com> Change-Id: I7be15b19b9a165a47e12c38deb9eed2b5b7d09ee
This commit is contained in:
parent
4f11b4e402
commit
297584e7b9
@ -1,17 +1,22 @@
|
||||
import logging
|
||||
#
|
||||
# Copyright (c) 2021 Wind River Systems, Inc.
|
||||
# Copyright (c) 2021-2022 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
import logging
|
||||
import sys
|
||||
import os
|
||||
|
||||
|
||||
def get_logger(module_name):
|
||||
logger = logging.getLogger(module_name)
|
||||
return config_logger(logger)
|
||||
|
||||
|
||||
def config_logger(logger):
|
||||
'''
|
||||
configure the logger: uncomment following lines for debugging
|
||||
'''
|
||||
# logger.setLevel(level=logging.DEBUG)
|
||||
logging.basicConfig(stream=sys.stdout,
|
||||
format='%(asctime)s %(levelname)-8s %(message)s',
|
||||
datefmt='%Y-%m-%d %H:%M:%S')
|
||||
logger.setLevel(level=os.environ.get("LOGGING_LEVEL", "INFO"))
|
||||
return logger
|
||||
|
@ -4,6 +4,8 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
from os import path
|
||||
|
||||
# phc states constants
|
||||
FREERUN_PHC_STATE = "Freerun"
|
||||
LOCKED_PHC_STATE = "Locked"
|
||||
@ -36,10 +38,18 @@ GNSS_DPLL_0 = "DPLL0"
|
||||
GNSS_DPLL_1 = "DPLL1"
|
||||
|
||||
UTC_OFFSET = "37"
|
||||
PTP_CONFIG_PATH = "/ptp/ptpinstance/"
|
||||
|
||||
if path.exists('/ptp/linuxptp/ptpinstance'):
|
||||
LINUXPTP_CONFIG_PATH = '/ptp/linuxptp/ptpinstance/'
|
||||
elif path.exists('/ptp/ptpinstance'):
|
||||
LINUXPTP_CONFIG_PATH = '/ptp/ptpinstance/'
|
||||
else:
|
||||
LINUXPTP_CONFIG_PATH = '/ptp/'
|
||||
PTP_CONFIG_PATH = LINUXPTP_CONFIG_PATH
|
||||
PHC2SYS_CONFIG_PATH = LINUXPTP_CONFIG_PATH
|
||||
TS2PHC_CONFIG_PATH = LINUXPTP_CONFIG_PATH
|
||||
PHC_CTL_PATH = "/usr/sbin/phc_ctl"
|
||||
PHC2SYS_DEFAULT_CONFIG = "/ptp/ptpinstance/phc2sys-phc2sys-legacy.conf"
|
||||
PHC2SYS_CONF_PATH = "/ptp/ptpinstance/"
|
||||
PHC2SYS_DEFAULT_CONFIG = PHC2SYS_CONFIG_PATH + "phc2sys-phc2sys-legacy.conf"
|
||||
|
||||
CLOCK_REALTIME = "CLOCK_REALTIME"
|
||||
|
||||
|
@ -10,6 +10,7 @@ import re
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
from trackingfunctionsdk.common.helpers import constants
|
||||
from trackingfunctionsdk.common.helpers import log_helper
|
||||
from trackingfunctionsdk.common.helpers.cgu_handler import CguHandler
|
||||
from trackingfunctionsdk.model.dto.gnssstate import GnssState
|
||||
@ -33,18 +34,23 @@ class GnssMonitor(Observer):
|
||||
_state = GnssState()
|
||||
gnss_cgu_handler = None
|
||||
|
||||
def __init__(self, config_file, nmea_serialport=None, pci_addr=None, cgu_path=None):
|
||||
def __init__(self, config_file, nmea_serialport=None, pci_addr=None,
|
||||
cgu_path=None):
|
||||
self.config_file = config_file
|
||||
try:
|
||||
pattern = '(?<=/ptp/ptpinstance/ts2phc-).*(?=.conf)'
|
||||
pattern = '(?<=' + \
|
||||
constants.TS2PHC_CONFIG_PATH + \
|
||||
'ts2phc-).*(?=.conf)'
|
||||
match = re.search(pattern, self.config_file)
|
||||
self.ts2phc_service_name = match.group()
|
||||
except AttributeError:
|
||||
LOG.warning("GnssMonitor: Unable to determine tsphc_service name from %s"
|
||||
% self.config_file)
|
||||
LOG.warning(
|
||||
"GnssMonitor: Unable to determine tsphc_service name from %s"
|
||||
% self.config_file)
|
||||
|
||||
# Setup GNSS data
|
||||
self.gnss_cgu_handler = CguHandler(config_file, nmea_serialport, pci_addr, cgu_path)
|
||||
self.gnss_cgu_handler = CguHandler(config_file, nmea_serialport,
|
||||
pci_addr, cgu_path)
|
||||
|
||||
if self.gnss_cgu_handler.nmea_serialport is None:
|
||||
self.gnss_cgu_handler.get_gnss_nmea_serialport_from_ts2phc_config()
|
||||
@ -56,8 +62,10 @@ class GnssMonitor(Observer):
|
||||
self.gnss_cgu_handler.read_cgu()
|
||||
self.gnss_cgu_handler.cgu_output_to_dict()
|
||||
|
||||
self.dmesg_values_to_check = {'pin': 'GNSS-1PPS',
|
||||
'pci_addr': self.gnss_cgu_handler.pci_addr}
|
||||
self.dmesg_values_to_check = {
|
||||
'pin': 'GNSS-1PPS',
|
||||
'pci_addr': self.gnss_cgu_handler.pci_addr
|
||||
}
|
||||
|
||||
# Initialize status
|
||||
if self.gnss_cgu_handler.cgu_output_parsed['EEC DPLL']['Current reference'] == 'GNSS-1PPS':
|
||||
@ -72,8 +80,10 @@ class GnssMonitor(Observer):
|
||||
|
||||
def set_gnss_status(self):
|
||||
# Check that ts2phc is running, else Freerun
|
||||
if not os.path.isfile('/var/run/ts2phc-%s.pid' % self.ts2phc_service_name):
|
||||
LOG.warning("TS2PHC instance %s is not running, reporting GNSS unlocked."
|
||||
if not os.path.isfile('/var/run/ts2phc-%s.pid'
|
||||
% self.ts2phc_service_name):
|
||||
LOG.warning("TS2PHC instance %s is not running, "
|
||||
"reporting GNSS unlocked."
|
||||
% self.ts2phc_service_name)
|
||||
self._state = GnssState.Failure_Nofix
|
||||
return
|
||||
@ -85,7 +95,8 @@ class GnssMonitor(Observer):
|
||||
self.gnss_pps_state = self.gnss_cgu_handler.cgu_output_parsed['PPS DPLL']['Status']
|
||||
LOG.debug("GNSS EEC Status is: %s" % self.gnss_eec_state)
|
||||
LOG.debug("GNSS PPS Status is: %s" % self.gnss_pps_state)
|
||||
if self.gnss_pps_state == 'locked_ho_ack' and self.gnss_eec_state == 'locked_ho_ack':
|
||||
if self.gnss_pps_state == 'locked_ho_ack' and \
|
||||
self.gnss_eec_state == 'locked_ho_ack':
|
||||
self._state = GnssState.Synchronized
|
||||
else:
|
||||
self._state = GnssState.Failure_Nofix
|
||||
@ -94,7 +105,6 @@ class GnssMonitor(Observer):
|
||||
|
||||
def get_gnss_status(self, holdover_time, freq, sync_state, event_time):
|
||||
previous_sync_state = sync_state
|
||||
max_holdover_time = (holdover_time - freq * 2)
|
||||
|
||||
self.set_gnss_status()
|
||||
|
||||
@ -105,4 +115,3 @@ class GnssMonitor(Observer):
|
||||
else:
|
||||
new_event = False
|
||||
return new_event, self._state, event_time
|
||||
|
||||
|
@ -31,8 +31,8 @@ class OsClockMonitor:
|
||||
self.phc2sys_config = phc2sys_config
|
||||
self.set_phc2sys_instance()
|
||||
|
||||
"""Normally initialize all fields, but allow these to be skipped to assist with unit testing
|
||||
or to short-circuit values if required.
|
||||
"""Normally initialize all fields, but allow these to be skipped to
|
||||
assist with unit testing or to short-circuit values if required.
|
||||
"""
|
||||
if init:
|
||||
self.get_os_clock_time_source()
|
||||
@ -40,8 +40,8 @@ class OsClockMonitor:
|
||||
self.set_os_clock_state()
|
||||
|
||||
def set_phc2sys_instance(self):
|
||||
self.phc2sys_instance = self.phc2sys_config.split(constants.PHC2SYS_CONF_PATH
|
||||
+ "phc2sys-")[1]
|
||||
self.phc2sys_instance = self.phc2sys_config.split(
|
||||
constants.PHC2SYS_CONFIG_PATH + "phc2sys-")[1]
|
||||
self.phc2sys_instance = self.phc2sys_instance.split(".")[0]
|
||||
LOG.debug("phc2sys config file: %s" % self.phc2sys_config)
|
||||
LOG.debug("phc2sys instance name: %s" % self.phc2sys_instance)
|
||||
@ -77,7 +77,8 @@ class OsClockMonitor:
|
||||
|
||||
phc_interface = cmdline_args[interface_index + 1]
|
||||
if phc_interface == constants.CLOCK_REALTIME:
|
||||
LOG.info("PHC2SYS is using CLOCK_REALTIME, OS Clock is not being disciplined by a PHC")
|
||||
LOG.info("PHC2SYS is using CLOCK_REALTIME, OS Clock is not being "
|
||||
"disciplined by a PHC")
|
||||
return None
|
||||
LOG.debug("PHC interface is %s" % phc_interface)
|
||||
return phc_interface
|
||||
@ -91,9 +92,10 @@ class OsClockMonitor:
|
||||
# Find the interface value inside the square brackets
|
||||
if re.match(r"^\[.*\]$", line) and line != "[global]":
|
||||
phc_interface = line.strip("[]")
|
||||
LOG.debug("PHC interface is %s" % phc_interface)
|
||||
return phc_interface
|
||||
|
||||
LOG.debug("PHC interface is %s" % phc_interface)
|
||||
return phc_interface
|
||||
return None
|
||||
|
||||
def _get_interface_phc_device(self):
|
||||
"""Determine the phc device for the interface"""
|
||||
@ -102,11 +104,14 @@ class OsClockMonitor:
|
||||
if len(ptp_device) == 0:
|
||||
# Try the 0th interface instead, required for some NIC types
|
||||
phc_interface_base = self.phc_interface[:-1] + "0"
|
||||
LOG.error("No ptp device found at %s trying %s instead" % (pattern, phc_interface_base))
|
||||
pattern = "/hostsys/class/net/" + phc_interface_base + "/device/ptp/*"
|
||||
LOG.error("No ptp device found at %s trying %s instead"
|
||||
% (pattern, phc_interface_base))
|
||||
pattern = "/hostsys/class/net/" + phc_interface_base + \
|
||||
"/device/ptp/*"
|
||||
ptp_device = glob(pattern)
|
||||
if len(ptp_device) == 0:
|
||||
LOG.warning("No ptp device found for base interface at %s" % pattern)
|
||||
LOG.warning("No ptp device found for base interface at %s"
|
||||
% pattern)
|
||||
return None
|
||||
if len(ptp_device) > 1:
|
||||
LOG.error("More than one ptp device found at %s" % pattern)
|
||||
@ -117,30 +122,42 @@ class OsClockMonitor:
|
||||
|
||||
def get_os_clock_offset(self):
|
||||
"""Get the os CLOCK_REALTIME offset"""
|
||||
if self.ptp_device is None:
|
||||
# This may happen in virtualized environments
|
||||
LOG.warning("No PTP device. Defaulting offset value to 0.")
|
||||
self.offset = "0"
|
||||
return
|
||||
try:
|
||||
ptp_device_path = "/dev/" + self.ptp_device
|
||||
offset = subprocess.check_output([constants.PHC_CTL_PATH, ptp_device_path, 'cmp']
|
||||
).decode().split()[-1]
|
||||
offset = subprocess.check_output(
|
||||
[constants.PHC_CTL_PATH, ptp_device_path, 'cmp']
|
||||
).decode().split()[-1]
|
||||
offset = offset.strip("-ns")
|
||||
LOG.debug("PHC offset is %s" % offset)
|
||||
self.offset = offset
|
||||
except Exception as ex:
|
||||
# We have seen rare instances where the ptp device cannot be read but then works fine
|
||||
# on the next attempt. Setting the offset to 0 here will allow the OS clock to move to
|
||||
# holdover. If there is a real fault, it will stay in holdover and tranition to freerun
|
||||
# but if it was just a single miss, it will return to locked on the next check.
|
||||
LOG.warning("Unable to read device offset for %s due to %s" % (ptp_device_path, ex))
|
||||
LOG.warning("Check operation of %s. Defaulting offset value to 0." % ptp_device_path)
|
||||
# We have seen rare instances where the ptp device cannot be read
|
||||
# but then works fine on the next attempt. Setting the offset to 0
|
||||
# here will allow the OS clock to move to holdover. If there is a
|
||||
# real fault, it will stay in holdover and tranition to freerun but
|
||||
# if it was just a single miss, it will return to locked on the
|
||||
# next check.
|
||||
LOG.warning("Unable to read device offset for %s due to %s"
|
||||
% (ptp_device_path, ex))
|
||||
LOG.warning("Check operation of %s. Defaulting offset value to 0."
|
||||
% ptp_device_path)
|
||||
self.offset = "0"
|
||||
|
||||
def set_os_clock_state(self):
|
||||
offset_int = int(self.offset)
|
||||
if offset_int > constants.PHC2SYS_TOLERANCE_HIGH or \
|
||||
offset_int < constants.PHC2SYS_TOLERANCE_LOW:
|
||||
LOG.warning("PHC2SYS offset is outside of tolerance, handling state change.")
|
||||
LOG.warning("PHC2SYS offset is outside of tolerance, "
|
||||
"handling state change.")
|
||||
self._state = OsClockState.Freerun
|
||||
else:
|
||||
LOG.info("PHC2SYS offset is within tolerance, OS clock state is LOCKED")
|
||||
LOG.info("PHC2SYS offset is within tolerance, "
|
||||
"OS clock state is LOCKED")
|
||||
self._state = OsClockState.Locked
|
||||
|
||||
def get_os_clock_state(self):
|
||||
@ -158,14 +175,16 @@ class OsClockMonitor:
|
||||
self.set_os_clock_state()
|
||||
|
||||
if self.get_os_clock_state() == constants.FREERUN_PHC_STATE:
|
||||
if previous_sync_state in [constants.UNKNOWN_PHC_STATE, constants.FREERUN_PHC_STATE]:
|
||||
if previous_sync_state in [constants.UNKNOWN_PHC_STATE,
|
||||
constants.FREERUN_PHC_STATE]:
|
||||
self._state = constants.FREERUN_PHC_STATE
|
||||
elif previous_sync_state == constants.LOCKED_PHC_STATE:
|
||||
self._state = constants.HOLDOVER_PHC_STATE
|
||||
elif previous_sync_state == constants.HOLDOVER_PHC_STATE and \
|
||||
time_in_holdover < max_holdover_time:
|
||||
LOG.debug("OS Clock: Time in holdover is %s Max time in holdover is %s" % (
|
||||
time_in_holdover, max_holdover_time))
|
||||
LOG.debug("OS Clock: Time in holdover is %s "
|
||||
"Max time in holdover is %s"
|
||||
% (time_in_holdover, max_holdover_time))
|
||||
self._state = constants.HOLDOVER_PHC_STATE
|
||||
else:
|
||||
self._state = constants.FREERUN_PHC_STATE
|
||||
@ -180,6 +199,6 @@ class OsClockMonitor:
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# This file can be run in a ptp-notification pod to verify the functionality of
|
||||
# os_clock_monitor.
|
||||
# This file can be run in a ptp-notification pod to verify the
|
||||
# functionality of os_clock_monitor.
|
||||
test_monitor = OsClockMonitor()
|
||||
|
@ -13,8 +13,6 @@
|
||||
#
|
||||
import datetime
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
from trackingfunctionsdk.model.dto.ptpstate import PtpState
|
||||
@ -43,24 +41,30 @@ class PtpMonitor:
|
||||
ptp_oper_dict = {
|
||||
# [pmc cmd, ptp keywords,...]
|
||||
1: ["'GET PORT_DATA_SET'", constants.PORT_STATE],
|
||||
2: ["'GET TIME_STATUS_NP'", constants.GM_PRESENT, constants.MASTER_OFFSET],
|
||||
3: ["'GET PARENT_DATA_SET'", constants.GM_CLOCK_CLASS, constants.GRANDMASTER_IDENTITY],
|
||||
2: ["'GET TIME_STATUS_NP'", constants.GM_PRESENT,
|
||||
constants.MASTER_OFFSET],
|
||||
3: ["'GET PARENT_DATA_SET'", constants.GM_CLOCK_CLASS,
|
||||
constants.GRANDMASTER_IDENTITY],
|
||||
4: ["'GET TIME_PROPERTIES_DATA_SET'", constants.TIME_TRACEABLE],
|
||||
5: ["'GET DEFAULT_DATA_SET'", constants.CLOCK_IDENTITY, constants.CLOCK_CLASS],
|
||||
5: ["'GET DEFAULT_DATA_SET'", constants.CLOCK_IDENTITY,
|
||||
constants.CLOCK_CLASS],
|
||||
}
|
||||
|
||||
pmc_query_results = {}
|
||||
|
||||
def __init__(self, ptp4l_instance, holdover_time, freq, phc2sys_service_name, init=True):
|
||||
def __init__(self, ptp4l_instance, holdover_time, freq,
|
||||
phc2sys_service_name, init=True):
|
||||
|
||||
if init:
|
||||
self.ptp4l_config = "/ptp/ptpinstance/ptp4l-%s.conf" % ptp4l_instance
|
||||
self.ptp4l_config = constants.PTP_CONFIG_PATH + ("ptp4l-%s.conf" %
|
||||
ptp4l_instance)
|
||||
self.ptp4l_service_name = ptp4l_instance
|
||||
self.phc2sys_service_name = phc2sys_service_name
|
||||
self.holdover_time = int(holdover_time)
|
||||
self.freq = int(freq)
|
||||
self._ptp_event_time = datetime.datetime.utcnow().timestamp()
|
||||
self._clock_class_event_time = datetime.datetime.utcnow().timestamp()
|
||||
self._clock_class_event_time = \
|
||||
datetime.datetime.utcnow().timestamp()
|
||||
self.set_ptp_sync_state()
|
||||
self.set_ptp_clock_class()
|
||||
|
||||
@ -74,7 +78,8 @@ class PtpMonitor:
|
||||
self._new_ptp_sync_event = new_ptp_sync_event
|
||||
|
||||
def get_ptp_sync_state(self):
|
||||
return self._new_ptp_sync_event, self._ptp_sync_state, self._ptp_event_time
|
||||
return self._new_ptp_sync_event, self._ptp_sync_state, \
|
||||
self._ptp_event_time
|
||||
|
||||
def set_ptp_clock_class(self):
|
||||
try:
|
||||
@ -82,11 +87,13 @@ class PtpMonitor:
|
||||
# Reset retry counter upon getting clock class
|
||||
self._clock_class_retry = 3
|
||||
except KeyError:
|
||||
LOG.warning("set_ptp_clock_class: Unable to read current clockClass")
|
||||
LOG.warning(
|
||||
"set_ptp_clock_class: Unable to read current clockClass")
|
||||
if self._clock_class_retry > 0:
|
||||
self._clock_class_retry -= 1
|
||||
LOG.warning("Trying to get clockClass %s more time(s) before "
|
||||
"setting clockClass 248 (FREERUN)" % self._clock_class_retry)
|
||||
"setting clockClass 248 (FREERUN)"
|
||||
% self._clock_class_retry)
|
||||
clock_class = self._clock_class
|
||||
else:
|
||||
clock_class = "248"
|
||||
@ -94,7 +101,8 @@ class PtpMonitor:
|
||||
if clock_class != self._clock_class:
|
||||
self._clock_class = clock_class
|
||||
self._new_clock_class_event = True
|
||||
self._clock_class_event_time = datetime.datetime.utcnow().timestamp()
|
||||
self._clock_class_event_time = \
|
||||
datetime.datetime.utcnow().timestamp()
|
||||
LOG.debug(self.pmc_query_results)
|
||||
LOG.info("PTP clock class is %s" % self._clock_class)
|
||||
else:
|
||||
@ -102,7 +110,8 @@ class PtpMonitor:
|
||||
|
||||
def get_ptp_clock_class(self):
|
||||
self.set_ptp_clock_class()
|
||||
return self._new_clock_class_event, self._clock_class, self._clock_class_event_time
|
||||
return self._new_clock_class_event, self._clock_class, \
|
||||
self._clock_class_event_time
|
||||
|
||||
def ptp_status(self):
|
||||
# holdover_time - time phc can maintain clock
|
||||
@ -123,28 +132,33 @@ class PtpMonitor:
|
||||
# max holdover time is calculated to be in a 'safety' zone
|
||||
max_holdover_time = (self.holdover_time - self.freq * 2)
|
||||
|
||||
|
||||
pmc, ptp4l, phc2sys, ptp4lconf = utils.check_critical_resources(self.ptp4l_service_name,
|
||||
self.phc2sys_service_name)
|
||||
pmc, ptp4l, phc2sys, ptp4lconf = \
|
||||
utils.check_critical_resources(self.ptp4l_service_name,
|
||||
self.phc2sys_service_name)
|
||||
# run pmc command if preconditions met
|
||||
if pmc and ptp4l and phc2sys and ptp4lconf:
|
||||
self.pmc_query_results, total_ptp_keywords, port_count = self.ptpsync()
|
||||
sync_state = utils.check_results(self.pmc_query_results, total_ptp_keywords, port_count)
|
||||
self.pmc_query_results, total_ptp_keywords, port_count = \
|
||||
self.ptpsync()
|
||||
sync_state = utils.check_results(self.pmc_query_results,
|
||||
total_ptp_keywords, port_count)
|
||||
else:
|
||||
LOG.warning("Missing critical resource: PMC %s PTP4L %s PHC2SYS %s PTP4LCONF %s" % (pmc, ptp4l, phc2sys, ptp4lconf))
|
||||
LOG.warning("Missing critical resource: "
|
||||
"PMC %s PTP4L %s PHC2SYS %s PTP4LCONF %s"
|
||||
% (pmc, ptp4l, phc2sys, ptp4lconf))
|
||||
sync_state = PtpState.Freerun
|
||||
# determine if transition into holdover mode (cannot be in holdover if system clock is
|
||||
# not in
|
||||
# sync)
|
||||
# determine if transition into holdover mode (cannot be in holdover if
|
||||
# system clock is not in sync)
|
||||
if sync_state == PtpState.Freerun and phc2sys:
|
||||
if previous_sync_state in [constants.UNKNOWN_PHC_STATE, PtpState.Freerun]:
|
||||
if previous_sync_state in [constants.UNKNOWN_PHC_STATE,
|
||||
PtpState.Freerun]:
|
||||
sync_state = PtpState.Freerun
|
||||
elif previous_sync_state == PtpState.Locked:
|
||||
sync_state = PtpState.Holdover
|
||||
elif previous_sync_state == PtpState.Holdover and time_in_holdover < \
|
||||
max_holdover_time:
|
||||
LOG.debug("PTP Status: Time in holdover is %s Max time in holdover is %s" % (
|
||||
time_in_holdover, max_holdover_time))
|
||||
elif previous_sync_state == PtpState.Holdover and \
|
||||
time_in_holdover < max_holdover_time:
|
||||
LOG.debug("PTP Status: Time in holdover is %s "
|
||||
"Max time in holdover is %s"
|
||||
% (time_in_holdover, max_holdover_time))
|
||||
sync_state = PtpState.Holdover
|
||||
else:
|
||||
sync_state = PtpState.Freerun
|
||||
@ -169,8 +183,8 @@ class PtpMonitor:
|
||||
|
||||
for key in range(1, len_dic + 1):
|
||||
cmd = ptp_dict_to_use[key][0]
|
||||
cmd = "pmc -b 0 -u -f /ptp/ptpinstance/ptp4l-" + self.ptp4l_service_name + ".conf " +\
|
||||
cmd
|
||||
cmd = "pmc -b 0 -u -f " + constants.PTP_CONFIG_PATH + \
|
||||
"ptp4l-" + self.ptp4l_service_name + ".conf " + cmd
|
||||
|
||||
ptp_keyword = ptp_dict_to_use[key][1:]
|
||||
total_ptp_keywords += len(ptp_keyword)
|
||||
@ -198,7 +212,8 @@ class PtpMonitor:
|
||||
if state[0] == item:
|
||||
if item == constants.PORT_STATE:
|
||||
port_count += 1
|
||||
result.update({constants.PORT.format(port_count): state[1]})
|
||||
result.update(
|
||||
{constants.PORT.format(port_count): state[1]})
|
||||
else:
|
||||
state[1] = state[1].replace('\\n', '')
|
||||
state[1] = state[1].replace('\'', '')
|
||||
@ -213,7 +228,7 @@ class PtpMonitor:
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_ptp = PtpMonitor()
|
||||
LOG.debug("PTP sync state for %s is %s" % (
|
||||
test_ptp.ptp4l_service_name, test_ptp.get_ptp_sync_state()))
|
||||
LOG.debug("PTP clock class for %s is %s" % (
|
||||
test_ptp.ptp4l_service_name, test_ptp.get_ptp_clock_class()))
|
||||
LOG.debug("PTP sync state for %s is %s"
|
||||
% (test_ptp.ptp4l_service_name, test_ptp.get_ptp_sync_state()))
|
||||
LOG.debug("PTP clock class for %s is %s"
|
||||
% (test_ptp.ptp4l_service_name, test_ptp.get_ptp_clock_class()))
|
||||
|
@ -12,12 +12,9 @@
|
||||
# Sync status provided as: 'Locked', 'Holdover', 'Freerun'
|
||||
#
|
||||
#
|
||||
import errno, os
|
||||
import os.path
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import subprocess
|
||||
import datetime
|
||||
import logging
|
||||
from trackingfunctionsdk.common.helpers import constants
|
||||
from trackingfunctionsdk.common.helpers import log_helper
|
||||
@ -53,7 +50,8 @@ def check_critical_resources(ptp4l_service_name, phc2sys_service_name):
|
||||
ptp4l = True
|
||||
if os.path.isfile('/var/run/phc2sys-%s.pid' % phc2sys_service_name):
|
||||
phc2sys = True
|
||||
if os.path.isfile('/ptp/ptpinstance/ptp4l-%s.conf' % ptp4l_service_name):
|
||||
if os.path.isfile(constants.PTP_CONFIG_PATH +
|
||||
('ptp4l-%s.conf' % ptp4l_service_name)):
|
||||
ptp4lconf = True
|
||||
return pmc, ptp4l, phc2sys, ptp4lconf
|
||||
|
||||
|
@ -18,15 +18,15 @@ from trackingfunctionsdk.services.daemon import DaemonControl
|
||||
LOG = logging.getLogger(__name__)
|
||||
log_helper.config_logger(LOG)
|
||||
|
||||
|
||||
|
||||
THIS_NAMESPACE = os.environ.get("THIS_NAMESPACE", 'notification')
|
||||
THIS_NODE_NAME = os.environ.get("THIS_NODE_NAME", 'controller-0')
|
||||
THIS_POD_IP = os.environ.get("THIS_POD_IP", '127.0.0.1')
|
||||
REGISTRATION_USER = os.environ.get("REGISTRATION_USER", "guest")
|
||||
REGISTRATION_PASS = os.environ.get("REGISTRATION_PASS", "guest")
|
||||
REGISTRATION_PORT = os.environ.get("REGISTRATION_PORT", "5672")
|
||||
# REGISTRATION_HOST = os.environ.get("REGISTRATION_HOST", 'registration.notification.svc.cluster.local')
|
||||
# REGISTRATION_HOST = \
|
||||
# os.environ.get("REGISTRATION_HOST",
|
||||
# 'registration.notification.svc.cluster.local')
|
||||
REGISTRATION_HOST = os.environ.get("REGISTRATION_HOST", 'localhost')
|
||||
|
||||
# 'rabbit://admin:admin@[127.0.0.1]:5672/'
|
||||
@ -39,7 +39,8 @@ NOTIFICATION_BROKER_PASS = os.environ.get("NOTIFICATIONSERVICE_PASS", "guest")
|
||||
NOTIFICATION_BROKER_PORT = os.environ.get("NOTIFICATIONSERVICE_PORT", "5672")
|
||||
|
||||
NOTIFICATION_TRANSPORT_ENDPOINT = 'rabbit://{0}:{1}@[{2}]:{3}'.format(
|
||||
NOTIFICATION_BROKER_USER, NOTIFICATION_BROKER_PASS, THIS_POD_IP, NOTIFICATION_BROKER_PORT)
|
||||
NOTIFICATION_BROKER_USER, NOTIFICATION_BROKER_PASS, THIS_POD_IP,
|
||||
NOTIFICATION_BROKER_PORT)
|
||||
|
||||
PTP_DEVICE_SIMULATED = os.environ.get("PTP_DEVICE_SIMULATED", True)
|
||||
|
||||
@ -53,7 +54,9 @@ PHC2SYS_SERVICE_NAME = None
|
||||
if os.environ.get("PHC2SYS_SERVICE_NAME").lower() == "false":
|
||||
LOG.info("OS Clock tracking disabled.")
|
||||
else:
|
||||
PHC2SYS_CONFIGS = glob.glob("/ptp/ptpinstance/phc2sys-*")
|
||||
PHC2SYS_CONFIGS = glob.glob(constants.PHC2SYS_CONFIG_PATH + "phc2sys-*")
|
||||
LOG.debug('Looked for phc2sys configuration file(s) in %s, found %d'
|
||||
% (constants.PHC2SYS_CONFIG_PATH, len(PHC2SYS_CONFIGS)))
|
||||
if len(PHC2SYS_CONFIGS) == 0:
|
||||
LOG.warning("No phc2sys config found.")
|
||||
else:
|
||||
@ -61,7 +64,8 @@ else:
|
||||
if len(PHC2SYS_CONFIGS) > 1:
|
||||
LOG.warning("Multiple phc2sys instances found, selecting %s" %
|
||||
PHC2SYS_CONFIG)
|
||||
pattern = '(?<=/ptp/ptpinstance/phc2sys-).*(?=.conf)'
|
||||
pattern = '(?<=' + constants.PHC2SYS_CONFIG_PATH + \
|
||||
'phc2sys-).*(?=.conf)'
|
||||
match = re.search(pattern, PHC2SYS_CONFIG)
|
||||
PHC2SYS_SERVICE_NAME = match.group()
|
||||
|
||||
@ -70,9 +74,11 @@ PTP4L_INSTANCES = []
|
||||
if os.environ.get("PTP4L_SERVICE_NAME").lower() == "false":
|
||||
LOG.info("PTP4L instance tracking disabled.")
|
||||
else:
|
||||
PTP4L_CONFIGS = glob.glob("/ptp/ptpinstance/ptp4l-*")
|
||||
PTP4L_CONFIGS = glob.glob(constants.PTP_CONFIG_PATH + "ptp4l-*")
|
||||
LOG.debug('Looked for ptp4l configuration file(s) in %s, found %d'
|
||||
% (constants.PTP_CONFIG_PATH, len(PTP4L_CONFIGS)))
|
||||
PTP4L_INSTANCES = []
|
||||
pattern = '(?<=/ptp/ptpinstance/ptp4l-).*(?=.conf)'
|
||||
pattern = '(?<=' + constants.PTP_CONFIG_PATH + 'ptp4l-).*(?=.conf)'
|
||||
for conf in PTP4L_CONFIGS:
|
||||
match = re.search(pattern, conf)
|
||||
PTP4L_INSTANCES.append(match.group())
|
||||
@ -82,9 +88,11 @@ GNSS_INSTANCES = []
|
||||
if os.environ.get("TS2PHC_SERVICE_NAME").lower() == "false":
|
||||
LOG.info("GNSS instance tracking disabled.")
|
||||
else:
|
||||
GNSS_CONFIGS = glob.glob("/ptp/ptpinstance/ts2phc-*")
|
||||
GNSS_CONFIGS = glob.glob(constants.TS2PHC_CONFIG_PATH + "ts2phc-*")
|
||||
LOG.debug('Looked for ts2phc configuration file(s) in %s, found %d'
|
||||
% (constants.TS2PHC_CONFIG_PATH, len(GNSS_CONFIGS)))
|
||||
GNSS_INSTANCES = []
|
||||
pattern = '(?<=/ptp/ptpinstance/ts2phc-).*(?=.conf)'
|
||||
pattern = '(?<=' + constants.TS2PHC_CONFIG_PATH + 'ts2phc-).*(?=.conf)'
|
||||
for conf in GNSS_CONFIGS:
|
||||
match = re.search(pattern, conf)
|
||||
GNSS_INSTANCES.append(match.group())
|
||||
@ -126,9 +134,7 @@ sqlalchemy_conf = {
|
||||
}
|
||||
LOG.info("PTP tracking service startup context %s" % context)
|
||||
sqlalchemy_conf_json = json.dumps(sqlalchemy_conf)
|
||||
default_daemoncontrol = DaemonControl(sqlalchemy_conf_json, json.dumps(context))
|
||||
default_daemoncontrol = DaemonControl(sqlalchemy_conf_json,
|
||||
json.dumps(context))
|
||||
|
||||
default_daemoncontrol.refresh()
|
||||
|
||||
|
||||
|
||||
|
@ -84,6 +84,8 @@ spec:
|
||||
value: "{{ .Values.notification.endpoint.pass }}"
|
||||
- name: NOTIFICATIONSERVICE_PORT
|
||||
value: "{{ .Values.notification.endpoint.port }}"
|
||||
- name: LOGGING_LEVEL
|
||||
value: "{{ .Values.location.log_level }}"
|
||||
|
||||
command: ["/bin/bash", "/mnt/locationservice_start.sh"]
|
||||
volumeMounts:
|
||||
@ -133,8 +135,6 @@ spec:
|
||||
value: "{{ .Values.ptptracking.ptp4lServiceName }}"
|
||||
- name: PHC2SYS_SERVICE_NAME
|
||||
value: "{{ .Values.ptptracking.phc2sysServiceName }}"
|
||||
- name: PHC2SYS_CONFIG
|
||||
value: "/ptp/ptpinstance/phc2sys-{{.Values.ptptracking.phc2sysServiceName}}.conf"
|
||||
- name: TS2PHC_SERVICE_NAME
|
||||
value: "{{ .Values.ptptracking.ts2phcServiceName }}"
|
||||
- name: LOGGING_LEVEL
|
||||
|
@ -59,6 +59,7 @@ notification:
|
||||
- "true"
|
||||
|
||||
location:
|
||||
log_level: INFO
|
||||
image:
|
||||
repository: starlingx/locationservice-base
|
||||
tag: stx.5.0-v1.0.1
|
||||
|
Loading…
Reference in New Issue
Block a user