Exemple #1
0
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
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
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
Exemple #5
0
    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
            )
Exemple #6
0
 def macro_productversion(self, ctx):
     # XXX: cache this also, see master.py
     return helpers.get_product_version()
 def macro_productversion(self, ctx):
     # XXX: cache this also, see master.py
     return helpers.get_product_version()
Exemple #8
0
 def get_product_version(self):
     return helpers.get_product_version()
Exemple #9
0
 def get_product_version(self):
     return helpers.get_product_version()
Exemple #10
0
    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
Exemple #11
0
    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
Exemple #12
0
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
Exemple #13
0
    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