Giter Site home page Giter Site logo

omnibus's People

Contributors

agourlay avatar ankur-nurun avatar kidi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

omnibus's Issues

Websocket

Would be awesome to pub/sub via websocket.
Wait for websocket to be implemented in akka-http

Minimal administration interface

provide a basic administration interface to

  • list topics
  • display http system stats
  • display topics stats
  • protected by basic authentication

Hateoas approach

Right now the GET method on a topic is used to subscribe directly to the topic.

I believe we should offer a level of indirection to expose the topic in a more REST fashion way.

GET /topics/animals/furry "should" reply something like

{
  "name" : "animals/furry",
  "creationDate" : "aTimestamp",
   "_links": {
        "subscribe": { "href": "/stream/topics/animals/furry" },
        "stats":  { "href": "/stats/topics/animals/furry" },
        "parent": { "href": "/topic/animals/" },
        "children": [{ "href": "/topic/animals/furry/cats",
                          "href": "/topic/animals/furry/fox" }]
    }
}

That way the topic tree can be traversed in a clear REST way and subscribing becomes more clear with the action url.

Any suggestion/feedback on this?

edit : fix title

Application metrics

Redesign application metrics using Codahale's Metrics http://metrics.codahale.com/manual/

Archived stats. should not be saved in Cassandra with the events but pushed outside to a reporter (Graphite for instance).

Managing stats manually will become a burden in a distributed environment where stats need to be aggregated.

Omnibus will only provide the current stats in the webadmin.

Topic's name should not be represented as String in internal API

Using String for topic's name introduce ugly code and potential bugs due to lack of input validation.

Create a case class TopicPath that would contain a list of segments and a toString method to produce the printed version.

The topic name coming from spray interface should be validated and serialized into TopicPath as soon as possible.

All actors should then use TopicPath in their API and state.

Admin API for to manage subscribers

Design a domain object for subscription (topic, IP, id etc) and expose API.

get -> /admin/subscribers : get collection of all subscribers
delete -> /admin/subscribers/{sub_id} : shutdown connection

Basic REST compliance

make sure that responses contain the proper status code and clean error messages

  • create topic with 201/202 and proper location header
  • delete topic 404 if topic not found
  • publish to topic 404 if topic not found
  • get topic 404 if topic not found
  • get stats topic 404 if topic not found
  • get stream topic 404 if topic not found

The stats response doesn't provide the global information of topic

The stat should provide the complete name of the topic; not only the current node topic name.
should be discussed :

  1. should add a new originEvent member : original event arrive on this topic; to be add on all stat
  2. should add a new topicPath member : complete path to the topic; can be store on a extern member of the list of stats as it will the same for all stats of this topic.

In the current stat response for a /stats/topics/omnibus/bus1
we got a topicName "bus1" but it doesn't help for aggregate stat if there is another /topics/personalbus/bus1; we can't say if it we need to add an entry for the first or the second.

can't start the app

[info] Running omnibus.Boot
2014-11-19 10:06:08,847 INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
Uncaught error from thread [omnibus-akka.persistence.dispatchers.default-plugin-dispatcher-9] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[omnibus]
java.lang.UnsatisfiedLinkError: org.fusesource.leveldbjni.internal.NativeOptions.init()V
at org.fusesource.leveldbjni.internal.NativeOptions.init(Native Method)
at org.fusesource.leveldbjni.internal.NativeOptions.(NativeOptions.java:54)
at org.fusesource.leveldbjni.JniDBFactory$OptionsResourceHolder.init(JniDBFactory.java:98)
at org.fusesource.leveldbjni.JniDBFactory.open(JniDBFactory.java:167)
at akka.persistence.journal.leveldb.LeveldbStore$class.preStart(LeveldbStore.scala:112)
at akka.persistence.journal.leveldb.LeveldbJournal.preStart(LeveldbJournal.scala:20)
at akka.actor.Actor$class.aroundPreStart(Actor.scala:470)
at akka.persistence.journal.leveldb.LeveldbJournal.aroundPreStart(LeveldbJournal.scala:20)
at akka.actor.ActorCell.create(ActorCell.scala:580)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:279)
at akka.dispatch.Mailbox.run(Mailbox.scala:220)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

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.