Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mesosphere/chaos

A lightweight framework for writing REST services in Scala.
https://github.com/mesosphere/chaos

dcos dcos-orchestration-guild

Last synced: 3 months ago
JSON representation

A lightweight framework for writing REST services in Scala.

Awesome Lists containing this project

README

        

# Chaos

A lightweight framework for writing REST services in Scala.

[Chaos](https://en.wikipedia.org/wiki/Chaos_%28cosmogony%29) (Greek χάος, khaos) refers to the formless or void state preceding the creation of the universe or cosmos in the Greek creation myths. Chaos (the framework) precedes creation of a universe of services.

## Why yet another framework?

At [Mesosphere](https://mesosphere.com/) we're building REST services in Scala, and we wanted a solid foundation. We had experience with [Dropwizard](https://github.com/dropwizard/dropwizard) and [Twitter Commons](https://github.com/twitter/commons), which are both great Java frameworks, but are a bit hard to use from Scala.
We also experimented with [Play!](https://github.com/playframework/playframework), but it does many things besides REST, which adds unnecessary baggage.

### Design Goals

We wanted a framework that

* is easy to use
* does one thing really well (REST)
* feels good in Scala
* is built on battle-tested and well-supported libraries
* doesn't try to reinvent the wheel

### Building Blocks

There are great JVM libraries for every part of a REST stack. Chaos just glues these together.

* [Jersey](https://jersey.java.net/) for REST via annotations
* [Guava](https://code.google.com/p/guava-libraries/) for lifecycle management and various utilities
* [Jetty](http://www.eclipse.org/jetty/) as the web server and servlet container
* [Jackson](http://wiki.fasterxml.com/JacksonHome) for JSON support
* [Coda Hale's Metrics](https://github.com/dropwizard/metrics) for JVM and application metrics

## Getting Started

### Requirements

* JDK 1.8+
* SBT 0.13.x+

### Example App

There is an example app in [src/main/scala/mesosphere/chaos-examples/]
(https://github.com/mesosphere/chaos/blob/master/chaos-examples/src/main/scala/mesosphere/chaos/examples/Main.scala). To run the example:

sbt run

Make requests to the example endpoints with [HTTPie](https://github.com/jkbrzt/httpie):

http localhost:8080/persons
http localhost:8080/persons name=Bunny age=42

### Built in Endpoints

* `/ping` - health check.
* `/metrics` - metrics as JSON
* `/logging` - configure log levels at runtime

### Using Chaos in your Project

Chaos releases are available from Mesosphere's Maven repository.

#### Maven

To add Chaos to a Maven project, add this to your `pom.xml`:


0.5.2

...



mesosphere-public-repo
Mesosphere Public Repo
http://downloads.mesosphere.io/maven

...



mesosphere
chaos
${chaos.version}

#### SBT

To add Chaos to an SBT project, add this to your `build.sbt`:

resolvers += "Mesosphere Public Repo" at "http://downloads.mesosphere.io/maven"

libraryDependencies ++= Seq(
"mesosphere" % "chaos" % "0.5.2",
"com.sun.jersey" % "jersey-bundle" % "1.17.1"
)

## Getting Help

If you have questions, please post on the [Chaos Users Group](https://groups.google.com/forum/?hl=en#!forum/chaos-users) email list.
The team at [Mesosphere](https://mesosphere.com/) is also happy to answer any questions.

## Authors

* [Tobias Knaup](https://github.com/guenter)
* [Florian Leibert](https://github.com/florianleibert)

## Current Users

* [Chronos](https://github.com/mesos/chronos), a fault tolerant job scheduler that handles dependencies and ISO8601 based schedules.