bool ScrapeConfig::InitStaticConfig()

in core/prometheus/schedulers/ScrapeConfig.cpp [115:196]


bool ScrapeConfig::InitStaticConfig(const Json::Value& scrapeConfig) {
    if (scrapeConfig.isMember(prometheus::JOB_NAME) && scrapeConfig[prometheus::JOB_NAME].isString()) {
        mJobName = scrapeConfig[prometheus::JOB_NAME].asString();
        if (mJobName.empty()) {
            LOG_ERROR(sLogger, ("job name is empty", ""));
            return false;
        }
    } else {
        return false;
    }

    if (scrapeConfig.isMember(prometheus::SCRAPE_INTERVAL) && scrapeConfig[prometheus::SCRAPE_INTERVAL].isString()) {
        string tmpScrapeIntervalString = scrapeConfig[prometheus::SCRAPE_INTERVAL].asString();
        mScrapeIntervalSeconds = DurationToSecond(tmpScrapeIntervalString);
        if (mScrapeIntervalSeconds == 0) {
            LOG_ERROR(sLogger, ("scrape interval is invalid", tmpScrapeIntervalString));
            return false;
        }
    }
    if (scrapeConfig.isMember(prometheus::SCRAPE_TIMEOUT) && scrapeConfig[prometheus::SCRAPE_TIMEOUT].isString()) {
        string tmpScrapeTimeoutString = scrapeConfig[prometheus::SCRAPE_TIMEOUT].asString();
        mScrapeTimeoutSeconds = DurationToSecond(tmpScrapeTimeoutString);
        if (mScrapeTimeoutSeconds == 0) {
            LOG_ERROR(sLogger, ("scrape timeout is invalid", tmpScrapeTimeoutString));
            return false;
        }
    }
    if (scrapeConfig.isMember(prometheus::METRICS_PATH) && scrapeConfig[prometheus::METRICS_PATH].isString()) {
        mMetricsPath = scrapeConfig[prometheus::METRICS_PATH].asString();
    }

    if (scrapeConfig.isMember(prometheus::HONOR_LABELS) && scrapeConfig[prometheus::HONOR_LABELS].isBool()) {
        mHonorLabels = scrapeConfig[prometheus::HONOR_LABELS].asBool();
    }

    if (scrapeConfig.isMember(prometheus::HONOR_TIMESTAMPS) && scrapeConfig[prometheus::HONOR_TIMESTAMPS].isBool()) {
        mHonorTimestamps = scrapeConfig[prometheus::HONOR_TIMESTAMPS].asBool();
    }

    if (scrapeConfig.isMember(prometheus::SCHEME) && scrapeConfig[prometheus::SCHEME].isString()) {
        mScheme = scrapeConfig[prometheus::SCHEME].asString();
    }

    // <size>: a size in bytes, e.g. 512MB. A unit is required. Supported units: B, KB, MB, GB, TB, PB, EB.
    if (scrapeConfig.isMember(prometheus::MAX_SCRAPE_SIZE) && scrapeConfig[prometheus::MAX_SCRAPE_SIZE].isString()) {
        string tmpMaxScrapeSize = scrapeConfig[prometheus::MAX_SCRAPE_SIZE].asString();
        mMaxScrapeSizeBytes = SizeToByte(tmpMaxScrapeSize);
        if (mMaxScrapeSizeBytes == 0) {
            LOG_ERROR(sLogger, ("max scrape size is invalid", tmpMaxScrapeSize));
            return false;
        }
    }

    if (scrapeConfig.isMember(prometheus::SAMPLE_LIMIT) && scrapeConfig[prometheus::SAMPLE_LIMIT].isInt64()) {
        mSampleLimit = scrapeConfig[prometheus::SAMPLE_LIMIT].asUInt64();
    }
    if (scrapeConfig.isMember(prometheus::SERIES_LIMIT) && scrapeConfig[prometheus::SERIES_LIMIT].isInt64()) {
        mSeriesLimit = scrapeConfig[prometheus::SERIES_LIMIT].asUInt64();
    }

    if (scrapeConfig.isMember(prometheus::RELABEL_CONFIGS)) {
        if (!mRelabelConfigs.Init(scrapeConfig[prometheus::RELABEL_CONFIGS])) {
            LOG_ERROR(sLogger, ("relabel config error", ""));
            return false;
        }
    }

    if (scrapeConfig.isMember(prometheus::METRIC_RELABEL_CONFIGS)) {
        if (!mMetricRelabelConfigs.Init(scrapeConfig[prometheus::METRIC_RELABEL_CONFIGS])) {
            LOG_ERROR(sLogger, ("metric relabel config error", ""));
            return false;
        }
    }

    if (scrapeConfig.isMember(prometheus::EXTERNAL_LABELS)) {
        if (!InitExternalLabels(scrapeConfig[prometheus::EXTERNAL_LABELS])) {
            LOG_ERROR(sLogger, ("external labels config error", ""));
            return false;
        }
    }
    return true;
}