package org.kairosdb.plugin.carbon;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Templates
{
public static final Logger logger = LoggerFactory.getLogger(Templates.class);
private static List<String> unknownMetrics = new ArrayList<String>();
private static List<Template> templates = new ArrayList<Template>();
public static void parse(String templates) {
List<String> list = Arrays.asList(templates.split(";"));
logger.info("Parsing {} template strings", list.size());
int count = 0;
for (String element : list) {
count++;
logger.debug("({}) Parsing template string: {}", count, element);
try {
Template template = new Template(element);
logger.debug(
"({}) Built template:\n" +
" Separators: Source='{}' Target='{}'\n" +
" Metric name pattern: {}\n" +
" Tags pattern: {}\n" +
" Tag names: {}\n" +
" Static tags: {}",
count,
template.getSourceSeparator(),
template.getTargetSeparator(),
template.getMetricNamePattern(),
template.getTagsPattern(),
template.getTagNames(),
template.getStaticTags()
);
add(template);
} catch (IllegalArgumentException e) {
String msg = "({}) Invalid template string ({}): {}";
logger.warn(msg, count, e.getMessage(), element);
}
}
logger.info("Built {} templates", getList().size());
}
public static void add(Template template) {
templates.add(template);
}
public static List<Template> getList() { return templates; }
public static Template lookup(String metricName) {
for (Template template : templates) {
if (template.matches(metricName)) {
return template;
}
}
if (!unknownMetrics.contains(metricName)) {
logger.warn("No template found for metric: {}", metricName);
unknownMetrics.add(metricName);
}
return null;
}
}