Git Product home page Git Product logo

pyplyn's Introduction

Introduction Build Status Static Analysis StackShare Code coverage

Pyplyn: a scalable time-series data collector

Pyplyn (meaning pipeline in Afrikaans) is an open source tool that extracts data from various sources, transforms and gives it meaning, and sends it to other systems for consumption.

Pyplyn was written to allow teams in Salesforce to power real-time health dashboards that go beyond one-to-one mapping of time-series data to visual artifacts.

One example of such an use-case is ingesting time-series data stored in Argus and Refocus, processing multiple metrics together (context), and displaying the result in Refocus (as red, yellow, or green lights).

Pyplyn System Diagram

Features

  • Simple and reliable data pipeline with support for various transformations
  • No code required, JSON-based syntax
  • Flexible multi-stage source/transformation/destination logic
  • Developed with support for extension via easy-to-grasph Java code
  • Highly available and scalable (the pipeline can be partitioned across multiple node)
  • Configurations can be added/updated/removed without restarting the process
  • Publishes operational metrics (errors, p95, etc.) for monitoring service health

Improvements from release 9.x

  • Faster processing speed with the use of RxJava (4.3x faster, tested on our reference dataset)
  • Cleaner code, mainly after converting models Immutables-annotated abstract classes
  • Support mutual TLS authentication for endpoints, by specifying a Java keystore and password
  • Connect, read, and write timeouts can now be specified for each connector
  • All Jackson-based models can now be serialized (with the type specifier field)
  • AppConfig.Global.minRepeatIntervalMillis was deprecated (replaced with AppConfig.Global.runOnce)
  • Bash script for managing the service's lifecycle (start, stop, restart, logs, etc.)
  • Since 10.0.0, Pyplyn releases follow Semantic versioning guidelines.

Roadmap

We welcome ideas for improvement and bugs and as such we encourage you to submit them by opening new issues on GitHub!

Running pyplyn

Pyplyn uses Maven for its build lifecycle. At least you will need to have Maven and Java 8 installed on your host OS.

Consult the full prerequisites section to find out more.

# Clone the Pyplyn repository
git clone https://github.com/salesforce/pyplyn /tmp/pyplyn

# Build the project with Maven
cd /tmp/pyplyn
mvn clean package

# Navigate to Pyplyn's build location
cd target/

# Create a new directory for your configurations (leave empty for now)
mkdir configurations

# Rename app-config.example.json and make the required changes
mv config/app-config.example.json config/pyplyn-config.json

# Rename connectors.example.json and make the required changes (see below)
mv config/connectors.example.json config/connectors.json

# Update the _connectors.json_ file and configure your endpoints
#

# Edit bin/pyplyn.sh and set _LOCATION_ to the absolute path of the build directory
#   LOCATION=/tmp/pyplyn/target

# Start pyplyn and check logs
bash bin/pyplyn.sh start

# Check that the program started without throwing any exceptions
bash ~/pyplyn/bin/pyplyn.sh logs

A full step-by-step explanation (including how to write configurations) can be found in the Pyplyn documentation.

Next steps?

Consult the Pyplyn Documentation for an in-depth explanation of Pyplyn's features.

Generate Javadocs by running the following Maven target: mvn package.

If you would like to contribute to Pyplyn, please read the contributor guide!

Thank you!

pyplyn's People

Contributors

jqian2017 avatar tehthree avatar svc-scm avatar

Stargazers

 avatar Rodolfo Noviski avatar  avatar Ilia Naryzhny avatar Chris Coraggio avatar Max G avatar Aneel Yelamanchili avatar Pratiksha Shah avatar Senthil_M avatar Jeremy Bae avatar Jiang Zhang avatar Harsh Kothari avatar stderr avatar Giordano Cardillo avatar  avatar Hari Krishna Dara avatar  avatar

Watchers

Mihai Bojin avatar James Cloos avatar  avatar  avatar  avatar  avatar Pratiksha Shah avatar

pyplyn's Issues

plugin-api build failures

Executed mvn package

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
objc[13860]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java (0x10b1e14c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10b2e14e0). One of the two will be used. Which one is undefined.
Running TestSuite
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@565f390
Tests run: 72, Failures: 7, Errors: 0, Skipped: 0, Time elapsed: 107.164 sec <<< FAILURE!
testFormatMillisWithDecimal(com.salesforce.pyplyn.util.FormatUtilsTest)  Time elapsed: 0.007 sec  <<< FAILURE!
java.lang.AssertionError:
Expected: "500.1ms"
     but: was "500,1ms"
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
	at com.salesforce.pyplyn.util.FormatUtilsTest.testFormatMillisWithDecimal(FormatUtilsTest.java:205)

testFormatNumber(com.salesforce.pyplyn.util.FormatUtilsTest)  Time elapsed: 0.003 sec  <<< FAILURE!
java.lang.AssertionError:
Expected: "1.2346"
     but: was "1,2346"
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
	at com.salesforce.pyplyn.util.FormatUtilsTest.testFormatNumber(FormatUtilsTest.java:180)

testFormatSeconds(com.salesforce.pyplyn.util.FormatUtilsTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError:
Expected: "1.5s"
     but: was "1,5s"
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
	at com.salesforce.pyplyn.util.FormatUtilsTest.testFormatSeconds(FormatUtilsTest.java:217)

testFormatSecondsDoubleDigits(com.salesforce.pyplyn.util.FormatUtilsTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError:
Expected: "12.35s"
     but: was "12,35s"
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
	at com.salesforce.pyplyn.util.FormatUtilsTest.testFormatSecondsDoubleDigits(FormatUtilsTest.java:229)

testFormattingNegativeNumbersDoesNotExceedSize(com.salesforce.pyplyn.util.FormatUtilsTest)  Time elapsed: 0.002 sec  <<< FAILURE!
java.lang.AssertionError:
Expected: "-9,2E"
     but: was "-9.2E"
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
	at com.salesforce.pyplyn.util.FormatUtilsTest.formatterAssertions(FormatUtilsTest.java:251)
	at java.util.HashMap$EntrySet.forEach(HashMap.java:1043)
	at com.salesforce.pyplyn.util.FormatUtilsTest.testFormattingNegativeNumbersDoesNotExceedSize(FormatUtilsTest.java:90)

testFormattingPositiveNumbersDoesNotExceedSize(com.salesforce.pyplyn.util.FormatUtilsTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.AssertionError:
Expected: "1,2K"
     but: was "1.2K"
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
	at com.salesforce.pyplyn.util.FormatUtilsTest.formatterAssertions(FormatUtilsTest.java:251)
	at java.util.HashMap$EntrySet.forEach(HashMap.java:1043)
	at com.salesforce.pyplyn.util.FormatUtilsTest.testFormattingPositiveNumbersDoesNotExceedSize(FormatUtilsTest.java:57)

testParseNumber(com.salesforce.pyplyn.util.FormatUtilsTest)  Time elapsed: 0.004 sec  <<< FAILURE!
java.lang.AssertionError:
Expected: an instance of java.lang.Double
     but: <1L> is a java.lang.Long
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
	at com.salesforce.pyplyn.util.FormatUtilsTest.testParseNumber(FormatUtilsTest.java:167)


Results :

Failed tests:   testFormatMillisWithDecimal(com.salesforce.pyplyn.util.FormatUtilsTest): (..)
  testFormatNumber(com.salesforce.pyplyn.util.FormatUtilsTest): (..)
  testFormatSeconds(com.salesforce.pyplyn.util.FormatUtilsTest): (..)
  testFormatSecondsDoubleDigits(com.salesforce.pyplyn.util.FormatUtilsTest): (..)
  testFormattingNegativeNumbersDoesNotExceedSize(com.salesforce.pyplyn.util.FormatUtilsTest): (..)
  testFormattingPositiveNumbersDoesNotExceedSize(com.salesforce.pyplyn.util.FormatUtilsTest): (..)
  testParseNumber(com.salesforce.pyplyn.util.FormatUtilsTest): (..)

Tests run: 72, Failures: 7, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] pyplyn ............................................. SUCCESS [ 43.005 s]
[INFO] plugin-api ......................................... FAILURE [02:11 min]
[INFO] argus-client ....................................... SKIPPED
[INFO] refocus-client ..................................... SKIPPED
[INFO] duct ............................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:54 min
[INFO] Finished at: 2017-05-16T16:03:14+02:00
[INFO] Final Memory: 33M/353M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project plugin-api: There are test failures.
[ERROR]
[ERROR] Please refer to /Users/Bartek/workspace/kamil/pyplyn/plugin-api/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :plugin-api

Comma instead of dots might be related to Polish locale set on my laptop. Other than that, I don't know how to troubleshoot these build failures. Any help would be appreciated.

jar file & releases

It would be cool if releases contained a pre-built jar file. The mvn package building step could've been omitted for non-dev or lazy (like me) users.

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.