Git Product home page Git Product logo

kuona's Introduction

Kuona Project Logo

kuona-project

This repository is no longer maintained and has been set to read-only/archived

Kuona is the Shona word that means "To see". This project is about providing valuable actionable insight into software delivery.

The Kuona-project is about deepening our understanding of how we can deliver value through software so that we can be more effective.

Kuona is a data collection and visualization tool for software development. Check out http://kuona.io for background on the project.

Currently there are no packages for download but there is a hosted example for some public open source projects at http://dashboard.kuona.io

Who is Kuona for?

Kuona for development teams

Development teams often have various systems that support how they deliver software:

  • Story task management
  • Version Control
  • CI/CD build deploy systems
  • Environment support

Each of these systems are information silos. Linkages between systems are typically by convention. e.g. Story numbers in commit messages, Build numbers injected into built artifacts. Tracabilty is often difficult.

Kuona is predicated on the idea that collecting and linking data from these disparate systems teams gain greater insight into the development process and can use this knowledge to improve.

The planned dashboard features will allow development teams to create dashboards based on the areas they are tracking or looking to improve.

Kuona for the enterprise

'How many versions of library X are currently used?' is often a asked. This might be because of security vulnerabilities or it might be that the organization is trying to upgrade the estate to a newer version. In most cases this is not a trivial question to answer when there are hundreds or thousands of components.

By gathering repository and dependency data this question is more easily answered along with others.

Design - How it works

Kuona uses collectors: command line tools and daemons to collect data from software development systems like Git, Jenkins as well as data from environments.

These Collectors post data through the kuona-api RESTful interface into an Elasticsearch backing store. Elasticsearch is particularly adept at handling both documents and time-series data. Each data type is given its own index.

/dashboard contains a AngularJS web application. We are currently using GitHub repositories as sample data for collection and analysis. http://dashboard.kuona.io/repositories provide search and snapshot views of these projects.

How you can help

  • Provide feedback and bug reports by trying Kuona a try in your environment
  • Join the development Google Group, ask questions and offer suggestions for features.

Getting started

Software projects should be easy to join. Ideally getting up and running as a developer should be very simple and quick. Long winded manual installations are error prone and a waste of everyone's time. If you find problems with the developer setup please raise an issue so we can address it.

Currently the installation scripts have only been tested on OS X/macOS and rely on homebrew.

Prerequisites

Kuona runs on the Java VM. You will need to install Java 8 JDK to build and run the kuona tools.

Check out the Brewfile for a full list of dependencies.

OS X/macOS Setup

git clone https://github.com/kuona/kuona-project.git
cd kuona-project
sh dev-setup

Once everything is setup use the build script to build all the components:

./build

Sometimes elasticsearch may not have started. If you have used brew to install the dependencies then use:

brew services elasticsearch restart

to get things rolling.

Code Navigation

The Dashboard is in two parts.

  • AngularJS web application kuona-project/dashboard
  • Web Service kuona-project/kuona-api

The API and other components depend on kuona-project/kuona-core which delivers most of the functionality. The API and collector command line tools are designed to be simple wrappers of the core capacities.

The public dashboard http://dashboard.kuona.io demonstrates the latest capabilities by reading public source code repositories and other systems.

Most components are written in Clojure but there are some small Java libraries that are built using maven.

Each collector has its own directory in /collectors

License

Kuona is licensed under the Apache License 2.0

kuona's People

Contributors

dependabot[bot] avatar grahambrooks avatar javatarz avatar xuv avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

kuona's Issues

Clojure module dependency capture and visualization in snapshots

Maven projects currently display their dependencies as a chart or graph. This story extends this support by capturing clojure project dependencies.

A couple of options

  1. lein deps :tree produces a clojure style formatted tree of dependencies.
  2. lein pom produces a pom that could then be processed by the current dependency reader.

Dashboard

As a uer I want to define a dashboard that shows key metrics that are important to me or my team.

Searchcode integration

Providing a linkage to a search code instance would allow users to search source code. This would be useful from failed builds - where an error is seen from a test or report. It would also be useful to view files from the snapshot page.

Dashboard widget width

The health check widget in particular needs more horizontal space to display its table properly. Being able to control the logical width would help with layout.

Allow a widget to override the default width (3 columns) as part of its definition.

It is arguable that more control over the grid by allowing widgets to be defined in a grid pattern of rows and columns would provide better flexibility.

Barchart widget

Dashboard widget to display a bar chart of data generated from a query.

image

Piechart widget

A dashboard widget that displays a pie chart of query results.

Example might be the distribution of file types
Ratio of different build systems

[Installation] build fails

Hey,
Following procedure to install Kuona locally.
Brew went through without a problem.
./build fails with this log of errors:

___  _  _ _ _    ___  _ _  _ ____    ____ ____ ____ ____
|__] |  | | |    |  \ | |\ | | __    |    |  | |__/ |___
|__] |__| | |___ |__/ | | \| |__]    |___ |__| |  \ |___


[INFO] kuona-core.maven: analyse-pom-file  /Users/juliendeswaef/Documents/Kuona/kuona-project/kuona-core/test/pom.xml
[INFO] kuona-core.maven: run-maven-dependency-list  /Users/juliendeswaef/Documents/Kuona/kuona-project/kuona-core/test/pom.xml
[INFO] kuona-core.maven: maven-dependency-tree  /Users/juliendeswaef/Documents/Kuona/kuona-project/kuona-core/test/pom.xml  to  /Users/juliendeswaef/Documents/Kuona/kuona-project/kuona-core/dependency.dot
[INFO] kuona-core.cloc: loc-collector  /Users/juliendeswaef/Documents/Kuona/kuona-project/test/test-repo 35b9fe2fdffd1bc767f32afc7becfcc6135381d3

FAIL "about collecting cloc data for revisions - each-commit" at (cloc_test.clj:75)
    Expected: nil
      Actual: java.io.IOException: Cannot run program "cloc": error=2, No such file or directory
              kuona_core.cloc$cloc.invokeStatic(cloc.clj:94)
              kuona_core.cloc$cloc.invoke(cloc.clj:92)
              kuona_core.cloc$collect_loc.invokeStatic(cloc.clj:142)
              kuona_core.cloc$collect_loc.invoke(cloc.clj:140)
              kuona_core.cloc$loc_collector.invokeStatic(cloc.clj:147)
              kuona_core.cloc$loc_collector.invoke(cloc.clj:144)
              kuona_core.cloc_test$eval15099$fn__15100$fn__15101$fn__15102$fn__15103$fn__15104$fn__15105.invoke(cloc_test.clj:76)
              kuona_core.git$each_commit.invokeStatic(git.clj:81)
              kuona_core.git$each_commit.invoke(git.clj:75)
              kuona_core.cloc_test$eval15099$fn__15100$fn__15101$fn__15102$fn__15103$fn__15104.invoke(cloc_test.clj:75)
              kuona_core.cloc_test$eval15099$fn__15100$fn__15101$fn__15102$fn__15103.invoke(cloc_test.clj:69)
              kuona_core.cloc_test$eval15099$fn__15100$fn__15101$fn__15102.invoke(cloc_test.clj:69)
              kuona_core.cloc_test$eval15099$fn__15100$fn__15101.invoke(cloc_test.clj:69)
              kuona_core.cloc_test$eval15099$fn__15100.invoke(cloc_test.clj:69)
              kuona_core.cloc_test$eval15099.invokeStatic(cloc_test.clj:69)
              kuona_core.cloc_test$eval15099.invoke(cloc_test.clj:69)
[INFO] kuona-core.git: commits  /Users/juliendeswaef/Documents/Kuona/kuona-project/test/test-repo
[INFO] kuona-core.git: commits  /Users/juliendeswaef/Documents/Kuona/kuona-project/test/test-repo
[INFO] kuona-core.git: Found  7  commits on  3  distinct days
[INFO] kuona-core.maven: analyse-pom-file  some/path
[INFO] kuona-core.maven: run-maven-dependency-list  some/path
[INFO] kuona-core.maven: maven-dependency-tree  some/path  to  /Users/juliendeswaef/Documents/Kuona/kuona-project/kuona-core/dependency.dot
[INFO] kuona-core.metric.store: put-document  http://localhost:9200/kuona-index/vcs 1 http://localhost:9200/kuona-index/vcs/1

FAIL at (store_test.clj:11)
Actual result did not agree with the checking function.
        Actual result: java.net.ConnectException: Connection refused (Connection refused)
              org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
              org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
              org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:323)
              org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
              org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
              org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
              org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
              org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
              org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
              org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
              clj_http.core$request.invokeStatic(core.clj:413)
              clj_http.core$request.invoke(core.clj:346)
              clj_http.core$request.invokeStatic(core.clj:347)
              clj_http.core$request.invoke(core.clj:346)
              clj_http.client$wrap_request_timing$fn__14716.invoke(client.clj:1046)
              clj_http.client$wrap_async_pooling$fn__14724.invoke(client.clj:1079)
              clj_http.headers$wrap_header_map$fn__13972.invoke(headers.clj:147)
              clj_http.client$wrap_query_params$fn__14610.invoke(client.clj:806)
              clj_http.client$wrap_basic_auth$fn__14616.invoke(client.clj:829)
              clj_http.client$wrap_oauth$fn__14621.invoke(client.clj:846)
              clj_http.client$wrap_user_info$fn__14628.invoke(client.clj:866)
              clj_http.client$wrap_url$fn__14698.invoke(client.clj:998)
              clj_http.client$wrap_decompression$fn__14389.invoke(client.clj:414)
              clj_http.client$wrap_input_coercion$fn__14538.invoke(client.clj:626)
              clj_http.client$wrap_additional_header_parsing$fn__14563.invoke(client.clj:681)
              clj_http.client$wrap_output_coercion$fn__14525.invoke(client.clj:570)
              clj_http.client$wrap_exceptions$fn__14336.invoke(client.clj:248)
              clj_http.client$wrap_accept$fn__14578.invoke(client.clj:724)
              clj_http.client$wrap_accept_encoding$fn__14585.invoke(client.clj:746)
              clj_http.client$wrap_content_type$fn__14572.invoke(client.clj:707)
              clj_http.client$wrap_form_params$fn__14675.invoke(client.clj:948)
              clj_http.client$wrap_nested_params$fn__14693.invoke(client.clj:983)
              clj_http.client$wrap_method$fn__14633.invoke(client.clj:882)
              clj_http.cookies$wrap_cookies$fn__13123.invoke(cookies.clj:131)
              clj_http.links$wrap_links$fn__14262.invoke(links.clj:63)
              clj_http.client$wrap_unknown_host$fn__14701.invoke(client.clj:1009)
              clj_http.client$request_STAR_.invokeStatic(client.clj:1181)
              clj_http.client$request_STAR_.invoke(client.clj:1174)
              clj_http.client$put.invokeStatic(client.clj:1205)
              clj_http.client$put.doInvoke(client.clj:1201)
              kuona_core.metric.store$put_document.invokeStatic(store.clj:103)
              kuona_core.metric.store$put_document.invoke(store.clj:98)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15216$fn__15217$fn__15218.invoke(store_test.clj:11)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15216$fn__15217.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15216.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201.invokeStatic(store_test.clj:7)
              kuona_core.metric.store_test$eval15201.invoke(store_test.clj:7)
    Checking function: (contains {:_id "1"})
    The checker said this about the reason:
        You can't compare #object[midje.util.exceptions.CapturedThrowable 0x3f44295 "midje.util.exceptions.CapturedThrowable@3f44295"] (class midje.util.exceptions.CapturedThrowable) to {:_id "1"} (class clojure.lang.PersistentArrayMap).

FAIL at (store_test.clj:12)
Actual result did not agree with the checking function.
        Actual result: java.net.ConnectException: Connection refused (Connection refused)
              org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
              org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
              org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:323)
              org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
              org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
              org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
              org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
              org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
              org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
              org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
              clj_http.core$request.invokeStatic(core.clj:413)
              clj_http.core$request.invoke(core.clj:346)
              clj_http.core$request.invokeStatic(core.clj:347)
              clj_http.core$request.invoke(core.clj:346)
              clj_http.client$wrap_request_timing$fn__14716.invoke(client.clj:1046)
              clj_http.client$wrap_async_pooling$fn__14724.invoke(client.clj:1079)
              clj_http.headers$wrap_header_map$fn__13972.invoke(headers.clj:147)
              clj_http.client$wrap_query_params$fn__14610.invoke(client.clj:806)
              clj_http.client$wrap_basic_auth$fn__14616.invoke(client.clj:829)
              clj_http.client$wrap_oauth$fn__14621.invoke(client.clj:846)
              clj_http.client$wrap_user_info$fn__14628.invoke(client.clj:866)
              clj_http.client$wrap_url$fn__14698.invoke(client.clj:998)
              clj_http.client$wrap_decompression$fn__14389.invoke(client.clj:414)
              clj_http.client$wrap_input_coercion$fn__14538.invoke(client.clj:626)
              clj_http.client$wrap_additional_header_parsing$fn__14563.invoke(client.clj:681)
              clj_http.client$wrap_output_coercion$fn__14525.invoke(client.clj:570)
              clj_http.client$wrap_exceptions$fn__14336.invoke(client.clj:248)
              clj_http.client$wrap_accept$fn__14578.invoke(client.clj:724)
              clj_http.client$wrap_accept_encoding$fn__14585.invoke(client.clj:746)
              clj_http.client$wrap_content_type$fn__14572.invoke(client.clj:707)
              clj_http.client$wrap_form_params$fn__14675.invoke(client.clj:948)
              clj_http.client$wrap_nested_params$fn__14693.invoke(client.clj:983)
              clj_http.client$wrap_method$fn__14633.invoke(client.clj:882)
              clj_http.cookies$wrap_cookies$fn__13123.invoke(cookies.clj:131)
              clj_http.links$wrap_links$fn__14262.invoke(links.clj:63)
              clj_http.client$wrap_unknown_host$fn__14701.invoke(client.clj:1009)
              clj_http.client$request_STAR_.invokeStatic(client.clj:1181)
              clj_http.client$request_STAR_.invoke(client.clj:1174)
              clj_http.client$get.invokeStatic(client.clj:1187)
              clj_http.client$get.doInvoke(client.clj:1183)
              kuona_core.metric.store$get_document.invokeStatic(store.clj:175)
              kuona_core.metric.store$get_document.invoke(store.clj:172)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15222$fn__15223$fn__15224.invoke(store_test.clj:12)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15222$fn__15223.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15222.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201.invokeStatic(store_test.clj:7)
              kuona_core.metric.store_test$eval15201.invoke(store_test.clj:7)
    Checking function: (contains {:found true})
    The checker said this about the reason:
        You can't compare #object[midje.util.exceptions.CapturedThrowable 0x472c13d "midje.util.exceptions.CapturedThrowable@472c13d"] (class midje.util.exceptions.CapturedThrowable) to {:found true} (class clojure.lang.PersistentArrayMap).

FAIL at (store_test.clj:13)
    Expected: true
      Actual: java.net.ConnectException: Connection refused (Connection refused)
              org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
              org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
              org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:323)
              org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
              org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
              org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
              org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
              org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
              org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
              org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
              clj_http.core$request.invokeStatic(core.clj:413)
              clj_http.core$request.invoke(core.clj:346)
              clj_http.core$request.invokeStatic(core.clj:347)
              clj_http.core$request.invoke(core.clj:346)
              clj_http.client$wrap_request_timing$fn__14716.invoke(client.clj:1046)
              clj_http.client$wrap_async_pooling$fn__14724.invoke(client.clj:1079)
              clj_http.headers$wrap_header_map$fn__13972.invoke(headers.clj:147)
              clj_http.client$wrap_query_params$fn__14610.invoke(client.clj:806)
              clj_http.client$wrap_basic_auth$fn__14616.invoke(client.clj:829)
              clj_http.client$wrap_oauth$fn__14621.invoke(client.clj:846)
              clj_http.client$wrap_user_info$fn__14628.invoke(client.clj:866)
              clj_http.client$wrap_url$fn__14698.invoke(client.clj:998)
              clj_http.client$wrap_decompression$fn__14389.invoke(client.clj:414)
              clj_http.client$wrap_input_coercion$fn__14538.invoke(client.clj:626)
              clj_http.client$wrap_additional_header_parsing$fn__14563.invoke(client.clj:681)
              clj_http.client$wrap_output_coercion$fn__14525.invoke(client.clj:570)
              clj_http.client$wrap_exceptions$fn__14336.invoke(client.clj:248)
              clj_http.client$wrap_accept$fn__14578.invoke(client.clj:724)
              clj_http.client$wrap_accept_encoding$fn__14585.invoke(client.clj:746)
              clj_http.client$wrap_content_type$fn__14572.invoke(client.clj:707)
              clj_http.client$wrap_form_params$fn__14675.invoke(client.clj:948)
              clj_http.client$wrap_nested_params$fn__14693.invoke(client.clj:983)
              clj_http.client$wrap_method$fn__14633.invoke(client.clj:882)
              clj_http.cookies$wrap_cookies$fn__13123.invoke(cookies.clj:131)
              clj_http.links$wrap_links$fn__14262.invoke(links.clj:63)
              clj_http.client$wrap_unknown_host$fn__14701.invoke(client.clj:1009)
              clj_http.client$request_STAR_.invokeStatic(client.clj:1181)
              clj_http.client$request_STAR_.invoke(client.clj:1174)
              clj_http.client$get.invokeStatic(client.clj:1187)
              clj_http.client$get.doInvoke(client.clj:1183)
              kuona_core.metric.store$get_document.invokeStatic(store.clj:175)
              kuona_core.metric.store$get_document.invoke(store.clj:172)
              kuona_core.metric.store$has_document_QMARK_.invokeStatic(store.clj:179)
              kuona_core.metric.store$has_document_QMARK_.invoke(store.clj:177)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15228$fn__15229$fn__15230.invoke(store_test.clj:13)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15228$fn__15229.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15228.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201.invokeStatic(store_test.clj:7)
              kuona_core.metric.store_test$eval15201.invoke(store_test.clj:7)
[ERROR] kuona-core.metric.store: unexpected error
java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
	at org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:323)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at clj_http.core$request.invokeStatic(core.clj:413)
	at clj_http.core$request.invoke(core.clj:346)
	at clj_http.core$request.invokeStatic(core.clj:347)
	at clj_http.core$request.invoke(core.clj:346)
	at clojure.lang.Var.invoke(Var.java:379)
	at clj_http.client$wrap_request_timing$fn__14716.invoke(client.clj:1046)
	at clj_http.client$wrap_async_pooling$fn__14724.invoke(client.clj:1079)
	at clj_http.headers$wrap_header_map$fn__13972.invoke(headers.clj:147)
	at clj_http.client$wrap_query_params$fn__14610.invoke(client.clj:806)
	at clj_http.client$wrap_basic_auth$fn__14616.invoke(client.clj:829)
	at clj_http.client$wrap_oauth$fn__14621.invoke(client.clj:846)
	at clj_http.client$wrap_user_info$fn__14628.invoke(client.clj:866)
	at clj_http.client$wrap_url$fn__14698.invoke(client.clj:998)
	at clj_http.client$wrap_decompression$fn__14389.invoke(client.clj:414)
	at clj_http.client$wrap_input_coercion$fn__14538.invoke(client.clj:626)
	at clj_http.client$wrap_additional_header_parsing$fn__14563.invoke(client.clj:681)
	at clj_http.client$wrap_output_coercion$fn__14525.invoke(client.clj:570)
	at clj_http.client$wrap_exceptions$fn__14336.invoke(client.clj:248)
	at clj_http.client$wrap_accept$fn__14578.invoke(client.clj:724)
	at clj_http.client$wrap_accept_encoding$fn__14585.invoke(client.clj:746)
	at clj_http.client$wrap_content_type$fn__14572.invoke(client.clj:707)
	at clj_http.client$wrap_form_params$fn__14675.invoke(client.clj:948)
	at clj_http.client$wrap_nested_params$fn__14693.invoke(client.clj:983)
	at clj_http.client$wrap_method$fn__14633.invoke(client.clj:882)
	at clj_http.cookies$wrap_cookies$fn__13123.invoke(cookies.clj:131)
	at clj_http.links$wrap_links$fn__14262.invoke(links.clj:63)
	at clj_http.client$wrap_unknown_host$fn__14701.invoke(client.clj:1009)
	at clj_http.client$request_STAR_.invokeStatic(client.clj:1181)
	at clj_http.client$request_STAR_.invoke(client.clj:1174)
	at clj_http.client$get.invokeStatic(client.clj:1187)
	at clj_http.client$get.doInvoke(client.clj:1183)
	at clojure.lang.RestFn.invoke(RestFn.java:410)
	at kuona_core.metric.store$has_index_QMARK_.invokeStatic(store.clj:66)
	at kuona_core.metric.store$has_index_QMARK_.invoke(store.clj:61)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15234$fn__15235$fn__15236.invoke(store_test.clj:14)
	at midje.checking.checkables$check_one$fn__9900$fn__9901.invoke(checkables.clj:115)
	at midje.checking.checkables$check_one$fn__9900.invoke(checkables.clj:114)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at midje.checking.checkables$check_one.invokeStatic(checkables.clj:110)
	at midje.checking.checkables$check_one.invoke(checkables.clj:105)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15234$fn__15235.invoke(store_test.clj:7)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15234.invoke(store_test.clj:7)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at midje.checking.facts$check_one$fn__4773.invoke(facts.clj:15)
	at midje.checking.facts$check_one.invokeStatic(facts.clj:14)
	at midje.checking.facts$check_one.invoke(facts.clj:9)
	at midje.checking.facts$creation_time_check.invokeStatic(facts.clj:36)
	at midje.checking.facts$creation_time_check.invoke(facts.clj:34)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203.invoke(store_test.clj:7)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at kuona_core.metric.store_test$eval15201$fn__15202.invoke(store_test.clj:7)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at midje.checking.facts$check_one$fn__4777.invoke(facts.clj:32)
	at midje.checking.facts$check_one.invokeStatic(facts.clj:31)
	at midje.checking.facts$check_one.invoke(facts.clj:9)
	at midje.checking.facts$creation_time_check.invokeStatic(facts.clj:36)
	at midje.checking.facts$creation_time_check.invoke(facts.clj:34)
	at kuona_core.metric.store_test$eval15201.invokeStatic(store_test.clj:7)
	at kuona_core.metric.store_test$eval15201.invoke(store_test.clj:7)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.RT.loadResourceScript(RT.java:372)
	at clojure.lang.RT.loadResourceScript(RT.java:363)
	at clojure.lang.RT.load(RT.java:453)
	at clojure.lang.RT.load(RT.java:419)
	at clojure.core$load$fn__5677.invoke(core.clj:5893)
	at clojure.core$load.invokeStatic(core.clj:5892)
	at clojure.core$load.doInvoke(core.clj:5876)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invokeStatic(core.clj:5697)
	at clojure.core$load_one.invoke(core.clj:5692)
	at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
	at clojure.core$load_lib.invokeStatic(core.clj:5736)
	at clojure.core$load_lib.doInvoke(core.clj:5717)
	at clojure.lang.RestFn.applyTo(RestFn.java:142)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$load_libs.invokeStatic(core.clj:5774)
	at clojure.core$load_libs.doInvoke(core.clj:5758)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$require.invokeStatic(core.clj:5796)
	at clojure.core$require.doInvoke(core.clj:5796)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at midje.repl$load_facts$fn__10550.invoke(repl.clj:208)
	at midje.repl$load_facts.invokeStatic(repl.clj:194)
	at midje.repl$load_facts.doInvoke(repl.clj:194)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at user$eval10613.invokeStatic(form-init2434738926573056589.clj:1)
	at user$eval10613.invoke(form-init2434738926573056589.clj:1)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.eval(Compiler.java:6917)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.Compiler.loadFile(Compiler.java:7317)
	at clojure.main$load_script.invokeStatic(main.clj:275)
	at clojure.main$init_opt.invokeStatic(main.clj:277)
	at clojure.main$init_opt.invoke(main.clj:277)
	at clojure.main$initialize.invokeStatic(main.clj:308)
	at clojure.main$null_opt.invokeStatic(main.clj:342)
	at clojure.main$null_opt.invoke(main.clj:339)
	at clojure.main$main.invokeStatic(main.clj:421)
	at clojure.main$main.doInvoke(main.clj:384)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at clojure.lang.Var.invoke(Var.java:383)
	at clojure.lang.AFn.applyToHelper(AFn.java:156)
	at clojure.lang.Var.applyTo(Var.java:700)
	at clojure.main.main(main.java:37)

FAIL at (store_test.clj:14)
    Expected: false
      Actual: java.net.ConnectException: Connection refused (Connection refused)
              org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
              org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
              org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:323)
              org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
              org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
              org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
              org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
              org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
              org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
              org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
              clj_http.core$request.invokeStatic(core.clj:413)
              clj_http.core$request.invoke(core.clj:346)
              clj_http.core$request.invokeStatic(core.clj:347)
              clj_http.core$request.invoke(core.clj:346)
              clj_http.client$wrap_request_timing$fn__14716.invoke(client.clj:1046)
              clj_http.client$wrap_async_pooling$fn__14724.invoke(client.clj:1079)
              clj_http.headers$wrap_header_map$fn__13972.invoke(headers.clj:147)
              clj_http.client$wrap_query_params$fn__14610.invoke(client.clj:806)
              clj_http.client$wrap_basic_auth$fn__14616.invoke(client.clj:829)
              clj_http.client$wrap_oauth$fn__14621.invoke(client.clj:846)
              clj_http.client$wrap_user_info$fn__14628.invoke(client.clj:866)
              clj_http.client$wrap_url$fn__14698.invoke(client.clj:998)
              clj_http.client$wrap_decompression$fn__14389.invoke(client.clj:414)
              clj_http.client$wrap_input_coercion$fn__14538.invoke(client.clj:626)
              clj_http.client$wrap_additional_header_parsing$fn__14563.invoke(client.clj:681)
              clj_http.client$wrap_output_coercion$fn__14525.invoke(client.clj:570)
              clj_http.client$wrap_exceptions$fn__14336.invoke(client.clj:248)
              clj_http.client$wrap_accept$fn__14578.invoke(client.clj:724)
              clj_http.client$wrap_accept_encoding$fn__14585.invoke(client.clj:746)
              clj_http.client$wrap_content_type$fn__14572.invoke(client.clj:707)
              clj_http.client$wrap_form_params$fn__14675.invoke(client.clj:948)
              clj_http.client$wrap_nested_params$fn__14693.invoke(client.clj:983)
              clj_http.client$wrap_method$fn__14633.invoke(client.clj:882)
              clj_http.cookies$wrap_cookies$fn__13123.invoke(cookies.clj:131)
              clj_http.links$wrap_links$fn__14262.invoke(links.clj:63)
              clj_http.client$wrap_unknown_host$fn__14701.invoke(client.clj:1009)
              clj_http.client$request_STAR_.invokeStatic(client.clj:1181)
              clj_http.client$request_STAR_.invoke(client.clj:1174)
              clj_http.client$get.invokeStatic(client.clj:1187)
              clj_http.client$get.doInvoke(client.clj:1183)
              kuona_core.metric.store$has_index_QMARK_.invokeStatic(store.clj:66)
              kuona_core.metric.store$has_index_QMARK_.invoke(store.clj:61)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15234$fn__15235$fn__15236.invoke(store_test.clj:14)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15234$fn__15235.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15234.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202$fn__15203.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201$fn__15202.invoke(store_test.clj:7)
              kuona_core.metric.store_test$eval15201.invokeStatic(store_test.clj:7)
              kuona_core.metric.store_test$eval15201.invoke(store_test.clj:7)
[ERROR] kuona-core.metric.store: unexpected error
java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
	at org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:323)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at clj_http.core$request.invokeStatic(core.clj:413)
	at clj_http.core$request.invoke(core.clj:346)
	at clj_http.core$request.invokeStatic(core.clj:347)
	at clj_http.core$request.invoke(core.clj:346)
	at clojure.lang.Var.invoke(Var.java:379)
	at clj_http.client$wrap_request_timing$fn__14716.invoke(client.clj:1046)
	at clj_http.client$wrap_async_pooling$fn__14724.invoke(client.clj:1079)
	at clj_http.headers$wrap_header_map$fn__13972.invoke(headers.clj:147)
	at clj_http.client$wrap_query_params$fn__14610.invoke(client.clj:806)
	at clj_http.client$wrap_basic_auth$fn__14616.invoke(client.clj:829)
	at clj_http.client$wrap_oauth$fn__14621.invoke(client.clj:846)
	at clj_http.client$wrap_user_info$fn__14628.invoke(client.clj:866)
	at clj_http.client$wrap_url$fn__14698.invoke(client.clj:998)
	at clj_http.client$wrap_decompression$fn__14389.invoke(client.clj:414)
	at clj_http.client$wrap_input_coercion$fn__14538.invoke(client.clj:626)
	at clj_http.client$wrap_additional_header_parsing$fn__14563.invoke(client.clj:681)
	at clj_http.client$wrap_output_coercion$fn__14525.invoke(client.clj:570)
	at clj_http.client$wrap_exceptions$fn__14336.invoke(client.clj:248)
	at clj_http.client$wrap_accept$fn__14578.invoke(client.clj:724)
	at clj_http.client$wrap_accept_encoding$fn__14585.invoke(client.clj:746)
	at clj_http.client$wrap_content_type$fn__14572.invoke(client.clj:707)
	at clj_http.client$wrap_form_params$fn__14675.invoke(client.clj:948)
	at clj_http.client$wrap_nested_params$fn__14693.invoke(client.clj:983)
	at clj_http.client$wrap_method$fn__14633.invoke(client.clj:882)
	at clj_http.cookies$wrap_cookies$fn__13123.invoke(cookies.clj:131)
	at clj_http.links$wrap_links$fn__14262.invoke(links.clj:63)
	at clj_http.client$wrap_unknown_host$fn__14701.invoke(client.clj:1009)
	at clj_http.client$request_STAR_.invokeStatic(client.clj:1181)
	at clj_http.client$request_STAR_.invoke(client.clj:1174)
	at clj_http.client$get.invokeStatic(client.clj:1187)
	at clj_http.client$get.doInvoke(client.clj:1183)
	at clojure.lang.RestFn.invoke(RestFn.java:410)
	at kuona_core.metric.store$has_index_QMARK_.invokeStatic(store.clj:66)
	at kuona_core.metric.store$has_index_QMARK_.invoke(store.clj:61)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15240$fn__15241$fn__15242.invoke(store_test.clj:15)
	at midje.checking.checkables$check_one$fn__9900$fn__9901.invoke(checkables.clj:115)
	at midje.checking.checkables$check_one$fn__9900.invoke(checkables.clj:114)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at midje.checking.checkables$check_one.invokeStatic(checkables.clj:110)
	at midje.checking.checkables$check_one.invoke(checkables.clj:105)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15240$fn__15241.invoke(store_test.clj:7)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15240.invoke(store_test.clj:7)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at midje.checking.facts$check_one$fn__4773.invoke(facts.clj:15)
	at midje.checking.facts$check_one.invokeStatic(facts.clj:14)
	at midje.checking.facts$check_one.invoke(facts.clj:9)
	at midje.checking.facts$creation_time_check.invokeStatic(facts.clj:36)
	at midje.checking.facts$creation_time_check.invoke(facts.clj:34)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203.invoke(store_test.clj:7)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at kuona_core.metric.store_test$eval15201$fn__15202.invoke(store_test.clj:7)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at midje.checking.facts$check_one$fn__4777.invoke(facts.clj:32)
	at midje.checking.facts$check_one.invokeStatic(facts.clj:31)
	at midje.checking.facts$check_one.invoke(facts.clj:9)
	at midje.checking.facts$creation_time_check.invokeStatic(facts.clj:36)
	at midje.checking.facts$creation_time_check.invoke(facts.clj:34)
	at kuona_core.metric.store_test$eval15201.invokeStatic(store_test.clj:7)
	at kuona_core.metric.store_test$eval15201.invoke(store_test.clj:7)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.RT.loadResourceScript(RT.java:372)
	at clojure.lang.RT.loadResourceScript(RT.java:363)
	at clojure.lang.RT.load(RT.java:453)
	at clojure.lang.RT.load(RT.java:419)
	at clojure.core$load$fn__5677.invoke(core.clj:5893)
	at clojure.core$load.invokeStatic(core.clj:5892)
	at clojure.core$load.doInvoke(core.clj:5876)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invokeStatic(core.clj:5697)
	at clojure.core$load_one.invoke(core.clj:5692)
	at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
	at clojure.core$load_lib.invokeStatic(core.clj:5736)
	at clojure.core$load_lib.doInvoke(core.clj:5717)
	at clojure.lang.RestFn.applyTo(RestFn.java:142)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$load_libs.invokeStatic(core.clj:5774)
	at clojure.core$load_libs.doInvoke(core.clj:5758)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$require.invokeStatic(core.clj:5796)
	at clojure.core$require.doInvoke(core.clj:5796)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at midje.repl$load_facts$fn__10550.invoke(repl.clj:208)
	at midje.repl$load_facts.invokeStatic(repl.clj:194)
	at midje.repl$load_facts.doInvoke(repl.clj:194)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at user$eval10613.invokeStatic(form-init2434738926573056589.clj:1)
	at user$eval10613.invoke(form-init2434738926573056589.clj:1)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.eval(Compiler.java:6917)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.Compiler.loadFile(Compiler.java:7317)
	at clojure.main$load_script.invokeStatic(main.clj:275)
	at clojure.main$init_opt.invokeStatic(main.clj:277)
	at clojure.main$init_opt.invoke(main.clj:277)
	at clojure.main$initialize.invokeStatic(main.clj:308)
	at clojure.main$null_opt.invokeStatic(main.clj:342)
	at clojure.main$null_opt.invoke(main.clj:339)
	at clojure.main$main.invokeStatic(main.clj:421)
	at clojure.main$main.doInvoke(main.clj:384)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at clojure.lang.Var.invoke(Var.java:383)
	at clojure.lang.AFn.applyToHelper(AFn.java:156)
	at clojure.lang.Var.applyTo(Var.java:700)
	at clojure.main.main(main.java:37)
[ERROR] kuona-core.metric.store: unexpected error
java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
	at org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:323)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at clj_http.core$request.invokeStatic(core.clj:413)
	at clj_http.core$request.invoke(core.clj:346)
	at clj_http.core$request.invokeStatic(core.clj:347)
	at clj_http.core$request.invoke(core.clj:346)
	at clojure.lang.Var.invoke(Var.java:379)
	at clj_http.client$wrap_request_timing$fn__14716.invoke(client.clj:1046)
	at clj_http.client$wrap_async_pooling$fn__14724.invoke(client.clj:1079)
	at clj_http.headers$wrap_header_map$fn__13972.invoke(headers.clj:147)
	at clj_http.client$wrap_query_params$fn__14610.invoke(client.clj:806)
	at clj_http.client$wrap_basic_auth$fn__14616.invoke(client.clj:829)
	at clj_http.client$wrap_oauth$fn__14621.invoke(client.clj:846)
	at clj_http.client$wrap_user_info$fn__14628.invoke(client.clj:866)
	at clj_http.client$wrap_url$fn__14698.invoke(client.clj:998)
	at clj_http.client$wrap_decompression$fn__14389.invoke(client.clj:414)
	at clj_http.client$wrap_input_coercion$fn__14538.invoke(client.clj:626)
	at clj_http.client$wrap_additional_header_parsing$fn__14563.invoke(client.clj:681)
	at clj_http.client$wrap_output_coercion$fn__14525.invoke(client.clj:570)
	at clj_http.client$wrap_exceptions$fn__14336.invoke(client.clj:248)
	at clj_http.client$wrap_accept$fn__14578.invoke(client.clj:724)
	at clj_http.client$wrap_accept_encoding$fn__14585.invoke(client.clj:746)
	at clj_http.client$wrap_content_type$fn__14572.invoke(client.clj:707)
	at clj_http.client$wrap_form_params$fn__14675.invoke(client.clj:948)
	at clj_http.client$wrap_nested_params$fn__14693.invoke(client.clj:983)
	at clj_http.client$wrap_method$fn__14633.invoke(client.clj:882)
	at clj_http.cookies$wrap_cookies$fn__13123.invoke(cookies.clj:131)
	at clj_http.links$wrap_links$fn__14262.invoke(links.clj:63)
	at clj_http.client$wrap_unknown_host$fn__14701.invoke(client.clj:1009)
	at clj_http.client$request_STAR_.invokeStatic(client.clj:1181)
	at clj_http.client$request_STAR_.invoke(client.clj:1174)
	at clj_http.client$put.invokeStatic(client.clj:1205)
	at clj_http.client$put.doInvoke(client.clj:1201)
	at clojure.lang.RestFn.invoke(RestFn.java:423)
	at kuona_core.metric.store$create_index.invokeStatic(store.clj:80)
	at kuona_core.metric.store$create_index.invoke(store.clj:75)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15246$fn__15247$fn__15248.invoke(store_test.clj:16)
	at midje.checking.checkables$check_one$fn__9900$fn__9901.invoke(checkables.clj:115)
	at midje.checking.checkables$check_one$fn__9900.invoke(checkables.clj:114)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at midje.checking.checkables$check_one.invokeStatic(checkables.clj:110)
	at midje.checking.checkables$check_one.invoke(checkables.clj:105)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15246$fn__15247.invoke(store_test.clj:7)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15246.invoke(store_test.clj:7)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at midje.checking.facts$check_one$fn__4773.invoke(facts.clj:15)
	at midje.checking.facts$check_one.invokeStatic(facts.clj:14)
	at midje.checking.facts$check_one.invoke(facts.clj:9)
	at midje.checking.facts$creation_time_check.invokeStatic(facts.clj:36)
	at midje.checking.facts$creation_time_check.invoke(facts.clj:34)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203.invoke(store_test.clj:7)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at kuona_core.metric.store_test$eval15201$fn__15202.invoke(store_test.clj:7)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at midje.checking.facts$check_one$fn__4777.invoke(facts.clj:32)
	at midje.checking.facts$check_one.invokeStatic(facts.clj:31)
	at midje.checking.facts$check_one.invoke(facts.clj:9)
	at midje.checking.facts$creation_time_check.invokeStatic(facts.clj:36)
	at midje.checking.facts$creation_time_check.invoke(facts.clj:34)
	at kuona_core.metric.store_test$eval15201.invokeStatic(store_test.clj:7)
	at kuona_core.metric.store_test$eval15201.invoke(store_test.clj:7)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.RT.loadResourceScript(RT.java:372)
	at clojure.lang.RT.loadResourceScript(RT.java:363)
	at clojure.lang.RT.load(RT.java:453)
	at clojure.lang.RT.load(RT.java:419)
	at clojure.core$load$fn__5677.invoke(core.clj:5893)
	at clojure.core$load.invokeStatic(core.clj:5892)
	at clojure.core$load.doInvoke(core.clj:5876)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invokeStatic(core.clj:5697)
	at clojure.core$load_one.invoke(core.clj:5692)
	at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
	at clojure.core$load_lib.invokeStatic(core.clj:5736)
	at clojure.core$load_lib.doInvoke(core.clj:5717)
	at clojure.lang.RestFn.applyTo(RestFn.java:142)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$load_libs.invokeStatic(core.clj:5774)
	at clojure.core$load_libs.doInvoke(core.clj:5758)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$require.invokeStatic(core.clj:5796)
	at clojure.core$require.doInvoke(core.clj:5796)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at midje.repl$load_facts$fn__10550.invoke(repl.clj:208)
	at midje.repl$load_facts.invokeStatic(repl.clj:194)
	at midje.repl$load_facts.doInvoke(repl.clj:194)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at user$eval10613.invokeStatic(form-init2434738926573056589.clj:1)
	at user$eval10613.invoke(form-init2434738926573056589.clj:1)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.eval(Compiler.java:6917)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.Compiler.loadFile(Compiler.java:7317)
	at clojure.main$load_script.invokeStatic(main.clj:275)
	at clojure.main$init_opt.invokeStatic(main.clj:277)
	at clojure.main$init_opt.invoke(main.clj:277)
	at clojure.main$initialize.invokeStatic(main.clj:308)
	at clojure.main$null_opt.invokeStatic(main.clj:342)
	at clojure.main$null_opt.invoke(main.clj:339)
	at clojure.main$main.invokeStatic(main.clj:421)
	at clojure.main$main.doInvoke(main.clj:384)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at clojure.lang.Var.invoke(Var.java:383)
	at clojure.lang.AFn.applyToHelper(AFn.java:156)
	at clojure.lang.Var.applyTo(Var.java:700)
	at clojure.main.main(main.java:37)
[ERROR] kuona-core.metric.store: unexpected error
java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
	at org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:323)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at clj_http.core$request.invokeStatic(core.clj:413)
	at clj_http.core$request.invoke(core.clj:346)
	at clj_http.core$request.invokeStatic(core.clj:347)
	at clj_http.core$request.invoke(core.clj:346)
	at clojure.lang.Var.invoke(Var.java:379)
	at clj_http.client$wrap_request_timing$fn__14716.invoke(client.clj:1046)
	at clj_http.client$wrap_async_pooling$fn__14724.invoke(client.clj:1079)
	at clj_http.headers$wrap_header_map$fn__13972.invoke(headers.clj:147)
	at clj_http.client$wrap_query_params$fn__14610.invoke(client.clj:806)
	at clj_http.client$wrap_basic_auth$fn__14616.invoke(client.clj:829)
	at clj_http.client$wrap_oauth$fn__14621.invoke(client.clj:846)
	at clj_http.client$wrap_user_info$fn__14628.invoke(client.clj:866)
	at clj_http.client$wrap_url$fn__14698.invoke(client.clj:998)
	at clj_http.client$wrap_decompression$fn__14389.invoke(client.clj:414)
	at clj_http.client$wrap_input_coercion$fn__14538.invoke(client.clj:626)
	at clj_http.client$wrap_additional_header_parsing$fn__14563.invoke(client.clj:681)
	at clj_http.client$wrap_output_coercion$fn__14525.invoke(client.clj:570)
	at clj_http.client$wrap_exceptions$fn__14336.invoke(client.clj:248)
	at clj_http.client$wrap_accept$fn__14578.invoke(client.clj:724)
	at clj_http.client$wrap_accept_encoding$fn__14585.invoke(client.clj:746)
	at clj_http.client$wrap_content_type$fn__14572.invoke(client.clj:707)
	at clj_http.client$wrap_form_params$fn__14675.invoke(client.clj:948)
	at clj_http.client$wrap_nested_params$fn__14693.invoke(client.clj:983)
	at clj_http.client$wrap_method$fn__14633.invoke(client.clj:882)
	at clj_http.cookies$wrap_cookies$fn__13123.invoke(cookies.clj:131)
	at clj_http.links$wrap_links$fn__14262.invoke(links.clj:63)
	at clj_http.client$wrap_unknown_host$fn__14701.invoke(client.clj:1009)
	at clj_http.client$request_STAR_.invokeStatic(client.clj:1181)
	at clj_http.client$request_STAR_.invoke(client.clj:1174)
	at clj_http.client$get.invokeStatic(client.clj:1187)
	at clj_http.client$get.doInvoke(client.clj:1183)
	at clojure.lang.RestFn.invoke(RestFn.java:410)
	at kuona_core.metric.store$has_index_QMARK_.invokeStatic(store.clj:66)
	at kuona_core.metric.store$has_index_QMARK_.invoke(store.clj:61)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15252$fn__15253$fn__15254.invoke(store_test.clj:17)
	at midje.checking.checkables$check_one$fn__9900$fn__9901.invoke(checkables.clj:115)
	at midje.checking.checkables$check_one$fn__9900.invoke(checkables.clj:114)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at midje.checking.checkables$check_one.invokeStatic(checkables.clj:110)
	at midje.checking.checkables$check_one.invoke(checkables.clj:105)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15252$fn__15253.invoke(store_test.clj:7)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203$fn__15252.invoke(store_test.clj:7)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at midje.checking.facts$check_one$fn__4773.invoke(facts.clj:15)
	at midje.checking.facts$check_one.invokeStatic(facts.clj:14)
	at midje.checking.facts$check_one.invoke(facts.clj:9)
	at midje.checking.facts$creation_time_check.invokeStatic(facts.clj:36)
	at midje.checking.facts$creation_time_check.invoke(facts.clj:34)
	at kuona_core.metric.store_test$eval15201$fn__15202$fn__15203.invoke(store_test.clj:7)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invokeStatic(thread_safe_var_nesting.clj:32)
	at midje.util.thread_safe_var_nesting$with_altered_roots_STAR_.invoke(thread_safe_var_nesting.clj:30)
	at kuona_core.metric.store_test$eval15201$fn__15202.invoke(store_test.clj:7)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.AFunction$1.doInvoke(AFunction.java:29)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at midje.checking.facts$check_one$fn__4777.invoke(facts.clj:32)
	at midje.checking.facts$check_one.invokeStatic(facts.clj:31)
	at midje.checking.facts$check_one.invoke(facts.clj:9)
	at midje.checking.facts$creation_time_check.invokeStatic(facts.clj:36)
	at midje.checking.facts$creation_time_check.invoke(facts.clj:34)
	at kuona_core.metric.store_test$eval15201.invokeStatic(store_test.clj:7)
	at kuona_core.metric.store_test$eval15201.invoke(store_test.clj:7)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.RT.loadResourceScript(RT.java:372)
	at clojure.lang.RT.loadResourceScript(RT.java:363)
	at clojure.lang.RT.load(RT.java:453)
	at clojure.lang.RT.load(RT.java:419)
	at clojure.core$load$fn__5677.invoke(core.clj:5893)
	at clojure.core$load.invokeStatic(core.clj:5892)
	at clojure.core$load.doInvoke(core.clj:5876)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invokeStatic(core.clj:5697)
	at clojure.core$load_one.invoke(core.clj:5692)
	at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
	at clojure.core$load_lib.invokeStatic(core.clj:5736)
	at clojure.core$load_lib.doInvoke(core.clj:5717)
	at clojure.lang.RestFn.applyTo(RestFn.java:142)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$load_libs.invokeStatic(core.clj:5774)
	at clojure.core$load_libs.doInvoke(core.clj:5758)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$require.invokeStatic(core.clj:5796)
	at clojure.core$require.doInvoke(core.clj:5796)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at midje.repl$load_facts$fn__10550.invoke(repl.clj:208)
	at midje.repl$load_facts.invokeStatic(repl.clj:194)
	at midje.repl$load_facts.doInvoke(repl.clj:194)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at user$eval10613.invokeStatic(form-init2434738926573056589.clj:1)
	at user$eval10613.invoke(form-init2434738926573056589.clj:1)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.eval(Compiler.java:6917)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.Compiler.loadFile(Compiler.java:7317)
	at clojure.main$load_script.invokeStatic(main.clj:275)
	at clojure.main$init_opt.invokeStatic(main.clj:277)
	at clojure.main$init_opt.invoke(main.clj:277)
	at clojure.main$initialize.invokeStatic(main.clj:308)
	at clojure.main$null_opt.invokeStatic(main.clj:342)
	at clojure.main$null_opt.invoke(main.clj:339)
	at clojure.main$main.invokeStatic(main.clj:421)
	at clojure.main$main.doInvoke(main.clj:384)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at clojure.lang.Var.invoke(Var.java:383)
	at clojure.lang.AFn.applyToHelper(AFn.java:156)
	at clojure.lang.Var.applyTo(Var.java:700)
	at clojure.main.main(main.java:37)
[INFO] kuona-core.metric.store: document-search term 10 1
[INFO] kuona-core.metric.store: Reading document count for  mapping/_search?q=term&size=10
[INFO] kuona-core.metric.store: document-search term 10 1
[INFO] kuona-core.metric.store: Reading document count for  mapping/_search?q=term&size=10
[INFO] kuona-core.metric.store: document-search term 10 1
[INFO] kuona-core.metric.store: Reading document count for  mapping/_search?q=term&size=10
[INFO] kuona-core.metric.store: document-search term 10 2
[INFO] kuona-core.metric.store: Reading document count for  mapping/_search?q=term&size=10&from=10
FAILURE: 5 checks failed.  (But 59 succeeded.)
Subprocess failed

Crawling performance improvement

Currently all metric collection is sequential by repository. This means that snapshot collection is very slow and runs behind the per-day code metric collection.

An improvement would be to refresh the repositories, collect the snapshots and then collect the code metrics for each repository.

Let's standardise on build facts

While building buildviz, I learnt that the space in CI/CD build analytics is wider than I originally anticipated.

Most people I talk to either want to

  1. use their own tooling to visualise their builds, and/or
  2. use their own logic/analytics to make sense of their problem at hand.

While I'll continue to investigate into buildviz, I'm currently focusing on making the build data extraction re-usable, in the hopes of creating a tiny community that will align around a shared build facts format. This project is hosted under https://github.com/cburgmer/build-data. I would welcome a discussion on the merits of such a thing, and would loce to see this got re-used here.

My hopes for you would be that you will support more CI/CD systems in the future by just offloading that part of the work to said library.

Git commit log

It would be nice to show the git commit log as part of the snapshot. Currently the log is used to capture metrics throughout the history of the project. Capturing the log itself would enrich the snapshots and provide deeper context to the project

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.