def _check_update_on_next_reboot(): try: ui_root = helpers.get_ui_config() if ui_root.hasS(ns_ui.automaticUpdates) and ui_root.getS(ns_ui.automaticUpdates, rdf.Boolean): # XXX: duplication update_info = helpers.get_db_root().getS(ns_ui.updateInfo, rdf.Type(ns_ui.UpdateInfo)) latest = update_info.getS(ns_ui.latestKnownVersion, rdf.String) current = helpers.get_product_version() if (latest != '') and (helpers.compare_product_versions(latest, current) > 0): return True else: return False else: return False except: # default, assume False _log.exception('cannot determine whether product update happens on next reboot') return False
def log_update_info(self): """Log useful update information concisely.""" str = 'own version is %s' % helpers.get_product_version() if self.do_update_check: str += ', update check' else: str += ', no update check' if self.force_update: str += ', update forced' else: str += ', update not forced' if self.do_timesync: str += ', timesync' else: str += ', no timesync' str += ', importpath %s' % self.importpath str += ', scriptspath %s' % self.scriptspath _log.info('UPDATEINFO: %s' % str)
def _check_update_on_next_reboot(): try: ui_root = helpers.get_ui_config() if ui_root.hasS(ns_ui.automaticUpdates) and ui_root.getS( ns_ui.automaticUpdates, rdf.Boolean): # XXX: duplication update_info = helpers.get_db_root().getS( ns_ui.updateInfo, rdf.Type(ns_ui.UpdateInfo)) latest = update_info.getS(ns_ui.latestKnownVersion, rdf.String) current = helpers.get_product_version() if (latest != '') and (helpers.compare_product_versions( latest, current) > 0): return True else: return False else: return False except: # default, assume False _log.exception( 'cannot determine whether product update happens on next reboot') return False
def _immediate_auto_update_check(self, identify_result): update_now = identify_result["updateImmediately"] # XXX: If this debug marker exists, autoupdate is forced if newer is available. if os.path.exists(constants.AUTOUPDATE_MARKERFILE): curr_ver = helpers.get_product_version() latest_ver = uihelpers.get_latest_product_version() if ( (curr_ver is not None) and (latest_ver is not None) and (helpers.compare_product_versions(latest_ver, curr_ver) > 0) ): _log.info( "detected that update is available (%s -> %s), immediate automatic update" % (curr_ver, latest_ver) ) update_now = True if update_now: # take action _log.info("management server has requested immediate update, forced check for updates now, rebooting") helpers.db_flush() uihelpers.ui_reboot( "immediate autoupdate", skip_update=False, force_update=True, force_fsck=True, delay=0.0 )
def macro_productversion(self, ctx): # XXX: cache this also, see master.py return helpers.get_product_version()
def get_product_version(self): return helpers.get_product_version()
def _do_mgmt_identify_args(self): root = self.rdf_root licinfo = self.rdf_root.getS(ns_ui.licenseInfo, rdf.Type(ns_ui.LicenseInfo)) uiconfig = self.rdf_root.getS(ns_ui.uiConfig, rdf.Type(ns_ui.UiConfig)) args = {} try: ui_root = helpers.get_ui_config() if ui_root.hasS(ns_ui.licenseKey) and ui_root.getS( ns_ui.licenseKey, rdf.String) != '': args['licenseKey'] = ui_root.getS(ns_ui.licenseKey, rdf.String) elif ui_root.hasS(ns_ui.testLicenseKey) and ui_root.getS( ns_ui.testLicenseKey, rdf.String) != '': args['licenseKey'] = ui_root.getS(ns_ui.testLicenseKey, rdf.String) else: raise Exception('no configured license') except: args['licenseKey'] = '' # anonymous try: t = helpers.get_boot_uuid() if t is None: args['bootUuid'] = '' else: args['bootUuid'] = t except: args['bootUuid'] = '' try: t = helpers.get_installation_uuid() if t is None: args['installationUuid'] = '' else: args['installationUuid'] = t except: args['installationUuid'] = '' try: t = helpers.get_cookie_uuid() if t is None: args['cookieUuid'] = '' else: args['cookieUuid'] = t except: args['cookieUuid'] = '' args['address'] = '0.0.0.0' # overridden by managementconnection args['port'] = 0 # overridden by managementconnection try: args['softwareVersion'] = helpers.get_product_version() except: args['softwareVersion'] = '' args['softwareBuildInfo'] = '' # XXX args['hardwareType'] = '' # XXX args['hardwareInfo'] = '' # XXX try: if self.force_update: args['automaticUpdates'] = True else: args['automaticUpdates'] = uiconfig.getS( ns_ui.automaticUpdates, rdf.Boolean) except: args['automaticUpdates'] = True try: args['isLiveCd'] = helpers.is_live_cd() except: args['isLiveCd'] = False return args
def mgmt_identify_args(self): args = {} try: # prefer actual license, then test (demo) license, then anonymous ui_root = helpers.get_ui_config() if ui_root.hasS(ns_ui.licenseKey) and ui_root.getS(ns_ui.licenseKey, rdf.String) != "": args["licenseKey"] = ui_root.getS(ns_ui.licenseKey, rdf.String) elif ui_root.hasS(ns_ui.testLicenseKey) and ui_root.getS(ns_ui.testLicenseKey, rdf.String) != "": args["licenseKey"] = ui_root.getS(ns_ui.testLicenseKey, rdf.String) else: raise Exception("no configured license") except: args["licenseKey"] = "" # anonymous try: t = helpers.get_boot_uuid() if t is None: args["bootUuid"] = "" else: args["bootUuid"] = t except: args["bootUuid"] = "" try: t = helpers.get_installation_uuid() if t is None: args["installationUuid"] = "" else: args["installationUuid"] = t except: args["installationUuid"] = "" try: t = helpers.get_cookie_uuid() if t is None: args["cookieUuid"] = "" else: args["cookieUuid"] = t except: args["cookieUuid"] = "" args["address"] = "0.0.0.0" # XXX: overwritten args["port"] = 0 # XXX: overwritten try: args["softwareVersion"] = helpers.get_product_version() except: args["softwareVersion"] = "" args["softwareBuildInfo"] = "" # XXX args["hardwareType"] = "" # XXX args["hardwareInfo"] = "" # XXX try: args["automaticUpdates"] = helpers.get_ui_config().getS(ns_ui.automaticUpdates, rdf.Boolean) except: args["automaticUpdates"] = True try: args["isLiveCd"] = helpers.is_live_cd() except: args["isLiveCd"] = False return args
def _update_snmp(): """Update SNMP data.""" from codebay.l2tpserver import licensemanager from codebay.l2tpserver import helpers from codebay.l2tpserver.webui import uihelpers now = datetime.datetime.utcnow() st = helpers.get_status() global_st = helpers.get_global_status() license_info = helpers.get_license_info() def _timeticks(td): return int(helpers.timedelta_to_seconds(td) * 100.0) def _timestamp(dt): return datatypes.encode_datetime_to_iso8601_subset(dt) def _get_management_conn(): # XXX: not the best place for this if global_st.hasS(ns.managementServerConnection): if global_st.getS(ns.managementServerConnection, rdf.Boolean): return 1 return 0 vals = {} lm = licensemanager.LicenseMonitor() usr_count, usr_limit, usr_limit_leeway, s2s_count, s2s_limit, s2s_limit_leeway = None, None, None, None, None, None try: usr_count, usr_limit, usr_limit_leeway, s2s_count, s2s_limit, s2s_limit_leeway = lm.count_both_users() except: _log.exception('cannot get ppp counts for snmp') # XXX: this sharing of status code is quite unclean; see uihelpers.get_status_and_substatus() for suggestions health_errors = 0 try: status_class, status_text, substatus_class, substatus_text, status_ok = uihelpers.get_status_and_substatus() if status_ok: health_errors = 0 else: health_errors = 1 except: _log.exception('cannot determine health errors') for k, l in [ ('vpneaseHealthCheckErrors', lambda: health_errors), ('vpneaseUserCount', lambda: usr_count), ('vpneaseSiteToSiteCount', lambda: s2s_count), ('vpneaseLastMaintenanceReboot', lambda: _timestamp(helpers.read_datetime_marker_file(constants.LAST_AUTOMATIC_REBOOT_MARKER_FILE))), ('vpneaseNextMaintenanceReboot', lambda: _timestamp(uihelpers.compute_periodic_reboot_time())), ('vpneaseLastSoftwareUpdate', lambda: _timestamp(helpers.read_datetime_marker_file(constants.LAST_SUCCESSFUL_UPDATE_MARKER_FILE))), ('vpneaseSoftwareVersion', lambda: helpers.get_product_version(cache=True, filecache=True)), ('vpneaseCpuUsage', lambda: int(global_st.getS(ns.cpuUsage, rdf.Float))), ('vpneaseMemoryUsage', lambda: int(global_st.getS(ns.memoryUsage, rdf.Float))), ('vpneaseVirtualMemoryUsage', lambda: int(global_st.getS(ns.swapUsage, rdf.Float))), ('vpneaseServiceUptime', lambda: _timeticks(now - st.getS(ns.startTime, rdf.Datetime))), ('vpneaseHostUptime', lambda: _timeticks(datetime.timedelta(0, helpers.get_uptime(), 0))), ('vpneasePublicAddress', lambda: st.getS(ns.publicInterface, rdf.Type(ns.NetworkInterface)).getS(ns.ipAddress, rdf.IPv4AddressSubnet).getAddress().toString()), ('vpneasePublicSubnet', lambda: st.getS(ns.publicInterface, rdf.Type(ns.NetworkInterface)).getS(ns.ipAddress, rdf.IPv4AddressSubnet).getMask().toString()), ('vpneasePublicMac', lambda: st.getS(ns.publicInterface, rdf.Type(ns.NetworkInterface)).getS(ns.macAddress, rdf.String)), ('vpneasePrivateAddress', lambda: st.getS(ns.privateInterface, rdf.Type(ns.NetworkInterface)).getS(ns.ipAddress, rdf.IPv4AddressSubnet).getAddress().toString()), ('vpneasePrivateSubnet', lambda: st.getS(ns.privateInterface, rdf.Type(ns.NetworkInterface)).getS(ns.ipAddress, rdf.IPv4AddressSubnet).getMask().toString()), ('vpneasePrivateMac', lambda: st.getS(ns.privateInterface, rdf.Type(ns.NetworkInterface)).getS(ns.macAddress, rdf.String)), ('vpneaseLicenseKey', lambda: license_info.getS(ns_ui.licenseKey, rdf.String)), ('vpneaseLicenseString', lambda: license_info.getS(ns_ui.licenseString, rdf.String)), ('vpneaseLicenseUserLimit', lambda: usr_limit), ('vpneaseLicenseSiteToSiteLimit', lambda: s2s_limit), ('vpneaseMaintenanceReboots', lambda: global_st.getS(ns.periodicReboots, rdf.Integer)), ('vpneaseWatchdogReboots', lambda: global_st.getS(ns.watchdogReboots, rdf.Integer)), ('vpneaseLicenseServerConnection', _get_management_conn), ]: try: val = l() if val is not None: vals[k] = val except: # these are expected in several cases, so don't spew too much log about them # XXX: it would be better if the checkers would figure these out for themselves # (when a value is expected and when not) _log.info('failed to get snmp value for key %s' % k) #_log.exception('failed to get snmp value for key %s' % k) keys = vals.keys() keys.sort() res = '' for k in keys: res += '%s=%s\n' % (k, vals[k]) # to ASCII, escaping any non-ASCII chars with XML escapes res = res.encode('US-ASCII', 'xmlcharrefreplace') f = None try: f = open(constants.SNMP_DATA_FILE, 'wb') f.write(res) finally: if f: f.close() f = None
def _do_mgmt_identify_args(self): root = self.rdf_root licinfo = self.rdf_root.getS(ns_ui.licenseInfo, rdf.Type(ns_ui.LicenseInfo)) uiconfig = self.rdf_root.getS(ns_ui.uiConfig, rdf.Type(ns_ui.UiConfig)) args = {} try: ui_root = helpers.get_ui_config() if ui_root.hasS(ns_ui.licenseKey) and ui_root.getS(ns_ui.licenseKey, rdf.String) != '': args['licenseKey'] = ui_root.getS(ns_ui.licenseKey, rdf.String) elif ui_root.hasS(ns_ui.testLicenseKey) and ui_root.getS(ns_ui.testLicenseKey, rdf.String) != '': args['licenseKey'] = ui_root.getS(ns_ui.testLicenseKey, rdf.String) else: raise Exception('no configured license') except: args['licenseKey'] = '' # anonymous try: t = helpers.get_boot_uuid() if t is None: args['bootUuid'] = '' else: args['bootUuid'] = t except: args['bootUuid'] = '' try: t = helpers.get_installation_uuid() if t is None: args['installationUuid'] = '' else: args['installationUuid'] = t except: args['installationUuid'] = '' try: t = helpers.get_cookie_uuid() if t is None: args['cookieUuid'] = '' else: args['cookieUuid'] = t except: args['cookieUuid'] = '' args['address'] = '0.0.0.0' # overridden by managementconnection args['port'] = 0 # overridden by managementconnection try: args['softwareVersion'] = helpers.get_product_version() except: args['softwareVersion'] = '' args['softwareBuildInfo'] = '' # XXX args['hardwareType'] = '' # XXX args['hardwareInfo'] = '' # XXX try: if self.force_update: args['automaticUpdates'] = True else: args['automaticUpdates'] = uiconfig.getS(ns_ui.automaticUpdates, rdf.Boolean) except: args['automaticUpdates'] = True try: args['isLiveCd'] = helpers.is_live_cd() except: args['isLiveCd'] = False return args