Jagger
 All Classes Namespaces Files Functions Variables Groups Pages
DefaultMetricService.java
Go to the documentation of this file.
1 package com.griddynamics.jagger.engine.e1.services;
2 
3 import com.griddynamics.jagger.coordinator.NodeContext;
4 import com.griddynamics.jagger.engine.e1.collector.MetricDescription;
5 import com.griddynamics.jagger.storage.KeyValueStorage;
6 import com.griddynamics.jagger.storage.Namespace;
7 import com.griddynamics.jagger.storage.fs.logging.LogWriter;
8 import com.griddynamics.jagger.storage.fs.logging.MetricLogEntry;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11 
12 import java.io.File;
13 import java.io.UnsupportedEncodingException;
14 import java.net.URLEncoder;
15 
23 public class DefaultMetricService implements MetricService {
24  private static final Logger log = LoggerFactory.getLogger(DefaultMetricService.class);
25 
26 
27  public static final String METRIC_MARKER = "METRIC";
28 
29  protected String sessionId;
30  protected String taskId;
31  protected NodeContext context;
32 
33  public DefaultMetricService(String sessionId, String taskId, NodeContext context){
34  this.sessionId = sessionId;
35  this.taskId = taskId;
36  this.context = context;
37  }
38 
39  @Override
40  public void createMetric(MetricDescription metricDescription) {
41  KeyValueStorage storage = context.getService(KeyValueStorage.class);
42 
43  storage.put(Namespace.of(sessionId, taskId, "metricDescription"),
44  metricDescription.getMetricId(),
45  metricDescription
46  );
47  }
48 
49  @Override
50  public void saveValue(String metricId, Number value) {
51  long current = System.currentTimeMillis();
52  saveValue(metricId, value, current);
53  }
54 
55  @Override
56  public void saveValue(String metricId, Number value, long timeStamp) {
57  LogWriter logWriter = context.getService(LogWriter.class);
58  try {
59  metricId = URLEncoder.encode(metricId, "UTF-8");
60  logWriter.log(sessionId, taskId + File.separatorChar + METRIC_MARKER + File.separatorChar + metricId, context.getId().getIdentifier(),
61  new MetricLogEntry(timeStamp, metricId, value));
62  } catch (UnsupportedEncodingException e) {
63  log.error("Can't save metric value with id={}", metricId, e);
64  }
65  }
66 
67  @Override
68  public void flush() {
69  LogWriter logWriter = context.getService(LogWriter.class);
70  logWriter.flush();
71  }
72 
73  @Override
74  public boolean isAvailable() {
75  return true;
76  }
77 }