Skip to content
This repository was archived by the owner on May 6, 2022. It is now read-only.

Commit e7f8709

Browse files
author
Florian Lautenschlager
committed
Merge pull request #3 from FlorianLautenschlager/master
Upgrade to Chronix 0.2
2 parents e9f46da + 4204fb1 commit e7f8709

File tree

14 files changed

+208
-80
lines changed

14 files changed

+208
-80
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ subprojects {
5858
apply plugin: 'com.jfrog.bintray'
5959
apply plugin: 'com.github.hierynomus.license'
6060

61-
version = "0.2-beta-2"
61+
version = "0.2"
6262

6363
license {
6464
includes(["**/*.java", "**/*.groovy"])

chronix-importer/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ dependencies {
44
compile 'org.yaml:snakeyaml:1.17'
55

66
compile 'de.qaware.chronix:chronix-api:0.1'
7-
compile 'de.qaware.chronix:chronix-server-client:0.2-beta-1'
8-
compile 'de.qaware.chronix:chronix-kassiopeia-simple:0.1.8-beta-4'
9-
compile 'de.qaware.chronix:chronix-kassiopeia-simple-converter:0.1.8-beta-4'
7+
compile 'de.qaware.chronix:chronix-server-client:0.2'
8+
compile 'de.qaware.chronix:chronix-kassiopeia-simple:0.2'
9+
compile 'de.qaware.chronix:chronix-kassiopeia-simple-converter:0.2'
1010

1111
//Testing
1212
testCompile 'org.codehaus.groovy:groovy-all:2.4.6'
@@ -30,5 +30,5 @@ jar {
3030

3131
task buildRelease(type: Copy) {
3232
into "$projectDir/release/lib"
33-
from "$buildDir/libs/chronix-importer-0.2-beta-1.jar"
33+
from "$buildDir/libs/chronix-importer-0.2.jar"
3434
}

chronix-importer/release/import.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#!/bin/bash
22

3-
java -Dlog4j.configurationFile=log4j2.xml -jar lib/chronix-importer-0.2-beta-1.jar config.yml data/
3+
java -Dlog4j.configurationFile=log4j2.xml -jar lib/chronix-importer-0.2.jar config.yml data/

chronix-importer/src/main/java/de/qaware/chronix/importer/csv/ChronixImporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import de.qaware.chronix.converter.serializer.gen.SimpleProtocolBuffers;
2121
import de.qaware.chronix.solr.client.ChronixSolrStorage;
2222
import de.qaware.chronix.timeseries.MetricTimeSeries;
23-
import de.qaware.chronix.timeseries.dt.Point;
23+
import de.qaware.chronix.timeseries.Point;
2424
import org.apache.solr.client.solrj.SolrClient;
2525
import org.apache.solr.client.solrj.SolrQuery;
2626
import org.apache.solr.client.solrj.SolrServerException;

chronix-server-integration/build.gradle

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ dependencies {
3131

3232
//Chronix
3333
compile 'de.qaware.chronix:chronix-api:0.1'
34-
compile 'de.qaware.chronix:chronix-server-client:0.1.3'
34+
compile 'de.qaware.chronix:chronix-server-client:0.2'
3535

3636
//Kassiopeia-Simple
37-
compile 'de.qaware.chronix:chronix-kassiopeia-simple:0.1.7'
38-
compile 'de.qaware.chronix:chronix-kassiopeia-simple-converter:0.1.7'
37+
compile 'de.qaware.chronix:chronix-kassiopeia-simple:0.2'
38+
compile 'de.qaware.chronix:chronix-kassiopeia-simple-converter:0.2'
3939

4040
//Kassiopeia
41-
compile 'de.qaware.chronix:chronix-kassiopeia:0.1.7'
42-
compile 'de.qaware.chronix:chronix-kassiopeia-converter:0.1.7'
41+
compile 'de.qaware.chronix:chronix-kassiopeia:0.2'
42+
compile 'de.qaware.chronix:chronix-kassiopeia-converter:0.2'
4343

4444
//Solr
45-
compile 'org.apache.solr:solr-solrj:5.5.0'
45+
compile 'org.apache.solr:solr-solrj:6.0.1'
4646

4747
}

chronix-server-integration/src/main/java/de/qaware/chronix/examples/server/ChronixClientExampleWithKassiopeia.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
/**
3636
* An example showcase of how to integrate chronix into your application.
37-
* Works with the release 0.1.1 of the chronix-server
37+
* Works with the release 0.2 of the chronix-server
3838
* Download at <a href="https://github.com/ChronixDB/chronix.server/releases/download/v0.1/chronix-0.1.zip">chronix-server-0.1.1</a>
3939
* Note: The example data stored in the release
4040
*
@@ -59,7 +59,7 @@ public static void main(String[] args) {
5959

6060
//We want the maximum of all time series that metric matches *load*.
6161
SolrQuery query = new SolrQuery("metric:*Load*");
62-
query.addFilterQuery("ag=max");
62+
query.addFilterQuery("function=max");
6363

6464
//The result is a Java Stream. We simply collect the result into a list.
6565
List<TimeSeries<Long, Double>> maxTS = chronix.stream(solr, query).collect(Collectors.toList());

chronix-server-integration/src/main/java/de/qaware/chronix/examples/server/ChronixClientExampleWithKassiopeiaSimple.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717

1818
import de.qaware.chronix.ChronixClient;
1919
import de.qaware.chronix.converter.KassiopeiaSimpleConverter;
20+
import de.qaware.chronix.converter.common.DoubleList;
21+
import de.qaware.chronix.converter.common.LongList;
2022
import de.qaware.chronix.solr.client.ChronixSolrStorage;
2123
import de.qaware.chronix.timeseries.MetricTimeSeries;
22-
import de.qaware.chronix.timeseries.dt.DoubleList;
23-
import de.qaware.chronix.timeseries.dt.LongList;
2424
import org.apache.solr.client.solrj.SolrClient;
2525
import org.apache.solr.client.solrj.SolrQuery;
2626
import org.apache.solr.client.solrj.impl.HttpSolrClient;
@@ -34,7 +34,7 @@
3434

3535
/**
3636
* An example showcase of how to integrate chronix into your application using kassiopeia-simple
37-
* Works with the release 0.1.1 of the chronix-server
37+
* Works with the release 0.2 of the chronix-server
3838
* Download at <a href="https://github.com/ChronixDB/chronix.server/releases/download/v0.1.1/chronix-0.1.1.zip">chronix-server-0.1.1</a>
3939
*
4040
* @author f.lautenschlager
@@ -64,7 +64,7 @@ public static void main(String[] args) {
6464

6565
//We want the maximum of all time series that metric matches *load*.
6666
SolrQuery query = new SolrQuery("metric:*Load*");
67-
query.addFilterQuery("ag=max");
67+
query.addFilterQuery("function=max");
6868

6969
//The result is a Java Stream. We simply collect the result into a list.
7070
List<MetricTimeSeries> maxTS = chronix.stream(solr, query).collect(Collectors.toList());

chronix-timeseries-exploration/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ To start you have to do a few steps:
1616
First ensure that you have a Java 8 runtime environment in your PATH.
1717
That should be easy ;-).
1818

19-
Then download, unzip and start the [Chronix Server](https://github.com/ChronixDB/chronix.server/releases/tag/v0.0.2).
19+
Then download, unzip and start the [Chronix Server](https://github.com/ChronixDB/chronix.server/releases/tag/0.2).
2020
```
21-
wget https://github.com/ChronixDB/chronix.server/releases/download/v0.1.1/chronix-0.1.1.zip
22-
unzip chronix-0.1.1.zip
21+
wget https://github.com/ChronixDB/chronix.server/releases/download/0.2/chronix-0.2.zip
22+
unzip chronix-0.2.zip
2323
24-
./chronix-solr-5.4.0/bin/solr start
24+
./chronix-solr-6.0.4/bin/solr start
2525
Waiting up to 30 seconds to see Solr running on port 8983 [|]
2626
Started Solr server on port 8983 (pid=2504). Happy searching!
2727
```

chronix-timeseries-exploration/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ dependencies {
2929
compile 'commons-logging:commons-logging:1.2'
3030

3131
compile 'de.qaware.chronix:chronix-api:0.1'
32-
compile 'de.qaware.chronix:chronix-server-client:0.2-beta-1'
33-
compile 'de.qaware.chronix:chronix-kassiopeia-simple:0.1.8-beta-4'
34-
compile 'de.qaware.chronix:chronix-kassiopeia-simple-converter:0.1.8-beta-4'
32+
compile 'de.qaware.chronix:chronix-server-client:0.2'
33+
compile 'de.qaware.chronix:chronix-kassiopeia-simple:0.2'
34+
compile 'de.qaware.chronix:chronix-kassiopeia-simple-converter:0.2'
3535
}
3636

3737

chronix-timeseries-exploration/src/main/java/de/qaware/chronix/examples/exploration/ui/MainController.java

Lines changed: 50 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,23 @@
1818
import de.qaware.chronix.ChronixClient;
1919
import de.qaware.chronix.converter.KassiopeiaSimpleConverter;
2020
import de.qaware.chronix.examples.exploration.ui.dt.DateAxis;
21+
import de.qaware.chronix.examples.exploration.ui.dt.ResultRow;
2122
import de.qaware.chronix.examples.exploration.ui.log.TextAreaLogger;
2223
import de.qaware.chronix.solr.client.ChronixSolrStorage;
2324
import de.qaware.chronix.timeseries.MetricTimeSeries;
24-
import de.qaware.chronix.timeseries.dt.Point;
25+
import de.qaware.chronix.timeseries.Point;
2526
import javafx.application.Platform;
27+
import javafx.collections.FXCollections;
28+
import javafx.collections.ObservableList;
2629
import javafx.concurrent.Task;
2730
import javafx.event.EventHandler;
2831
import javafx.fxml.FXML;
2932
import javafx.fxml.Initializable;
3033
import javafx.scene.chart.LineChart;
3134
import javafx.scene.chart.NumberAxis;
3235
import javafx.scene.chart.XYChart;
36+
import javafx.scene.control.TableColumn;
37+
import javafx.scene.control.TableView;
3338
import javafx.scene.control.TextArea;
3439
import javafx.scene.input.KeyCode;
3540
import javafx.scene.input.KeyEvent;
@@ -76,6 +81,24 @@ public class MainController implements Initializable {
7681
@FXML
7782
private LineChart<DateAxis, NumberAxis> chart;
7883

84+
/**
85+
* Table stuff below
86+
*/
87+
@FXML
88+
private TableView<ResultRow> resultTable;
89+
@FXML
90+
private TableColumn<ResultRow, String> timeSeries;
91+
@FXML
92+
private TableColumn<ResultRow, String> aggregationOrAnalysis;
93+
@FXML
94+
private TableColumn<ResultRow, String> arguments;
95+
@FXML
96+
private TableColumn<ResultRow, String> values;
97+
@FXML
98+
private TableColumn<ResultRow, String> order;
99+
100+
private ObservableList<ResultRow> rows = FXCollections.observableArrayList();
101+
79102
//Chronix stuff
80103
private ChronixClient<MetricTimeSeries, SolrClient, SolrQuery> chronix;
81104
private SolrClient solr;
@@ -87,6 +110,14 @@ public void initialize(URL location, ResourceBundle resources) {
87110
//Pipe logs to ui
88111
TextAreaLogger.setTextArea(logs);
89112

113+
//Init table
114+
timeSeries.setCellValueFactory(cellData -> cellData.getValue().timeSeriesProperty());
115+
aggregationOrAnalysis.setCellValueFactory(cellData -> cellData.getValue().aggregationOrAnalysisProperty());
116+
arguments.setCellValueFactory(cellData -> cellData.getValue().argumentsProperty());
117+
values.setCellValueFactory(cellData -> cellData.getValue().valuesProperty());
118+
order.setCellValueFactory(cellData -> cellData.getValue().orderProperty());
119+
resultTable.setItems(rows);
120+
90121
EventHandler<KeyEvent> queryExecuteHandler = event -> {
91122
if (event.getCode() == KeyCode.ENTER && event.isShiftDown()) {
92123
queryTimeSeries();
@@ -146,19 +177,18 @@ protected Void call() throws Exception {
146177

147178
Platform.runLater(() -> {
148179
chart.getData().clear();
180+
rows.clear();
149181
//Start the query
150182
chart.setTitle("Your Query was q=" + queryString + " fq=" + fq);
151183
});
152184

153185
SolrQuery query = new SolrQuery(queryString);
186+
query.addField("+data");
187+
154188
boolean hasFilterQueries = !fq.isEmpty();
155189

156190
if (hasFilterQueries) {
157191
query.addFilterQuery(fq);
158-
159-
if (fq.contains("analysis=")) {
160-
query.addField("+data");
161-
}
162192
}
163193

164194
long queryStart = System.currentTimeMillis();
@@ -167,12 +197,10 @@ protected Void call() throws Exception {
167197
LOGGER.info("Query took: {} ms for {} points", (queryEnd - queryStart), size(result));
168198
queryStart = System.currentTimeMillis();
169199
result.forEach(ts -> {
170-
171200
if (hasFilterQueries) {
172-
convertAggregationOrAnalysisTs(ts, fq.contains("analysis="));
173-
} else {
174-
convertTsToSeries(ts);
201+
addFunctionsToTable(ts);
175202
}
203+
convertTsToSeries(ts);
176204
});
177205
queryEnd = System.currentTimeMillis();
178206
LOGGER.info("Charting took: {} ms", (queryEnd - queryStart));
@@ -183,47 +211,32 @@ protected Void call() throws Exception {
183211

184212
}
185213

186-
private void convertAggregationOrAnalysisTs(MetricTimeSeries ts, boolean analysis) {
214+
private void addFunctionsToTable(MetricTimeSeries ts) {
187215

188216
//find the aggregations / and analyses
189217

190218
ts.getAttributesReference().forEach((key, value) -> {
191219
//we have function value
192220
if (key.contains("function") && !key.contains("arguments")) {
193221
String[] splits = key.split("_");
194-
XYChart.Series<DateAxis, NumberAxis> series = new XYChart.Series<>();
195222

196223
//function name
197-
String name = splits[1];
198-
series.setName(join(ts) + "-" + name);
199-
200-
//function value
201-
if (analysis) {
202-
ts.sort();
203-
List<Point> points;
204-
if (ts.size() > 200_000) {
205-
points = ts.points().filter(point -> point.getIndex() % 1000 == 0).collect(Collectors.toList());
206-
} else {
207-
points = ts.points().collect(Collectors.toList());
208-
}
209-
//reduce the amount shown in the chart we add every 100ths point
210-
addPointsToSeries(series, points);
211-
Platform.runLater(() -> chart.getData().add(series));
224+
String name = splits[2];
212225

226+
//Check if the function has an argument
227+
Object arguments = ts.attribute(splits[0] + "_" + splits[1] + "_arguments_" + splits[2]);
213228

214-
} else {
215-
Instant start = Instant.ofEpochMilli(ts.getStart());
216-
Instant end = Instant.ofEpochMilli(ts.getEnd());
217-
218-
series.getData().add(new XYChart.Data(start, value));
219-
series.getData().add(new XYChart.Data(end, value));
220-
Platform.runLater(() -> chart.getData().add(series));
229+
ResultRow row = new ResultRow();
230+
row.setTimeSeries(join(ts));
231+
row.setAggregationOrAnalysis(name);
232+
if (arguments != null) {
233+
row.setArguments(arguments.toString());
221234
}
235+
row.setValues(value.toString());
236+
row.setOrder(key);
222237

223238

224-
} else {
225-
//function arguments
226-
//currently ignored
239+
rows.add(row);
227240
}
228241

229242

@@ -276,7 +289,7 @@ private String join(MetricTimeSeries ts) {
276289
if (ts == null) {
277290
return "";
278291
}
279-
return String.valueOf(ts.attribute("host")) + "-" +
292+
return ts.attribute("host") + "-" +
280293
ts.attribute("source") + "-" +
281294
ts.attribute("group") + "-" +
282295
ts.getMetric();

0 commit comments

Comments
 (0)