예제 #1
0
def load_mnt_rrd(target):
    """
    类似于 get_mnt_rrd,获取 rrd 控制对象,根据 target 缓存该对象。不同的是,
    get_mnt_rrd 发现 target 不存在缓存中时,会直接返回 None,而 load_mnt_rrd
    会创建 rrd 再返回控制对象。

    :note: 使用 load_mnt_rrd 的默认前提是 target 对应的 rrd 控制对象是已经创建了。
    """
    global _rrds
    if target not in _rrds:
        filepath = figure_path(target)
        _rrds[target] = RRDManip(filepath, None, None, None)
        _rrds[target].ensure_rrd()
    return _rrds[target]
예제 #2
0
def register_mnt_rrd(target, dsNames, dsType='GAUGE'):
    """Register a RRDManip.

    :param target: 用于构造 rrd 文件名以及做为内部rrd对象缓存的 key
    :param dsName: 用于指定 data source 的命名
    :param dsType: 用于指定 data source 类型
    """
    global _rrds
    if (target not in _rrds) or (_rrds[target] is None):
        filepath = figure_path(target)
        roundRobinArchives = settings.PRECISE_MAX_RRA + \
                             settings.PRECISE_AVERAGE_RRA
        dataSources = []
        for dsname in dsNames:
            datasource = settings.DataSource.copy()
            datasource['dsName'] = dsname
            datasource['dsType'] = dsType
            dataSources.append(datasource)
        _rrds[target] = RRDManip(filepath, settings.STEP,
                                 dataSources, roundRobinArchives)
        _rrds[target].ensure_rrd()