### beego [manual](https://github.com/astaxie/build-web-application-with-golang/blob/master/en/eBook/preface.md) ### Logic ##### (to do https://github.com/feedlabs/elasticfeed/issues) - [ ] plugins manager (internal API: storages access, run-time state; communication) - [ ] plugins (initial scenario, pipeline, indexer, sensor) - [ ] workflows manager (hooks distribution, in-out plugin flow, workflow-file templeting) - [ ] analytics storage (feed/entries metrics) - [ ] plugins storage (user/app/feed data) - [ ] runtime storage (sensors: location, weather, night/day, moon phase, sun activity) - [ ] responses/requests templates - [ ] caching with `groupcache` - [ ] feed/entries storage - [ ] analytics storage - [ ] plugins storage - [ ] runtime sensors state - [ ] distributed computing for streaming - [ ] multi node simple pub/sub communication (own protocol) - [ ] multi node pub/sub nased on redis pub/sub (large production) - [x] entity vs controller: entity/model should contains all public/private params; controller should define interface for request/response for each api version separately - [x] resource - [x] apply ordering - [x] pagingination - [x] response - [x] HTTP RESPONSE CODEs - [x] lower all IDs when json send to client (should be defined by controller for each api version) - [x] paging marker: last timestamp - [x] `pretty=true` printing - [x] ordering - [x] request - [x] HEADERS: `Content-Type: application/json` - [x] ordering - [x] paging: timestamp-to-timestamp OR timestamp-to-requiredItemNumber - http: timestamp, limit/timestamp, direction (asc/desc) - websocket: timestamp, limit/timestamp, direction (asc/desc) - [x] stream (https://github.com/feedlabs/elasticfeed/issues/23) - [x] channel/feed - event/action - data - [x] channel/room -> feedAPI specific - [x] event -> ACTION: ADD, EDIT, DELETE, ??? (MUST BE HANDLED BY FRONT END PLUGIN) - [x] data -> full data or changes - [x] authorisation https://github.com/feedlabs/feedify/issues/11 ; [docu](https://github.com/astaxie/build-web-application-with-golang/blob/master/en/eBook/14.4.md) ; should use SSL; curl, ajax, websockets - [x] app: basic + digest: token based - [x] onUpdate: merge new data with old stored data based on ID - [x] re-stream user data - [x] linking entries to feed pages ### Deployment - [ ] `elasticfeed` installed with puppet module (defined as puppet class for nodes) - [ ] `elasticfeed` linux package - [x] `elasticfeed` cross platform support (binary release) ### Feed - [x] this is LIST - [x] contains ENTRIES - [x] ENTRY contains TIMESTAMP - [x] TIMESTAMP provides TIMEAXIS ordering - [x] ~~can be displayed as: LIST, AGGREGATED BY TIME or TAGS~~ - [x] there are 3 types: PRIVATE, PUBLIC, GROUP, GLOBAL ### Prototype Stream: - [x] stream_adapter - [x] stream_adapter_socket_redis (&redis_client) - [x] stream_message (&stream_adapter) - [x] stream_store ServiceManager: - [x] service_graph (&config) - [x] service_stream (&config) - [x] service_cache (&config) - [x] service_js (&config) Redis - [x] redis_client Neo4j https://github.com/feedlabs/feedify/pull/6 - [x] neo4j_client Memcache https://github.com/feedlabs/feedify/pull/6 - [x] memcache_client Graph https://github.com/feedlabs/feedify/pull/6 - [x] graph_adapter - [x] graph_neo4j_cypher (&neo4j_client) - [x] graph_entity - [x] graph_node - [x] graph_relation - [x] graph_database - [x] graph_query - [x] graph_storage (&graph_adapter) - [x] graph_store ### Basics Standards: - [ ] FOAF http://xmlns.com/foaf/spec/ - [ ] FOAF Project http://www.foaf-project.org/ - [ ] N-Quad (RDF) http://www.w3.org/TR/n-quads/ - [ ] JSON-LD http://en.wikipedia.org/wiki/JSON-LD - [ ] Gremlin http://gremlindocs.com/ - [ ] GremlinAPI from cayley https://github.com/google/cayley/blob/master/docs/GremlinAPI.md ### Thoughts tips: - [ ] cayley stores simple types (string, int, date) and relations ``` _:subject1 <http://an.example/predicate1> "object1" <http://example.org/graph1> . ``` - [ ] mongo could store `object` and then create in `cayley` relation if needed. Each query would require 2 call; One to cayley and second to mongo Gremlin - `curl -d '[{"subject":"bob","predicate":"follows", "object":"dani"}]' localhost:64210/api/v1/write` - `curl -d "g.V('alice').Out('follows').Intersect(g.V('bob').Out('follows')).All()" localhost:64210/api/v1/query/gremlin` - `curl -d "g.V('alice').Out('follows').All()" localhost:64210/api/v1/query/gremlin` ``` Important questions; b2b 0. what is feedlabs and what is it for? 1. how can we improve your content? 2. how can we increase your users experience? 3. how can we improve your application UI? 4. how can we speed up your data delivery 5. how can we safe you computing instances? 6. how can we safe you storage space? 7. how can we improve you analytics? 8. how can you track your users behaviours? 9. how can we improve your knowledge about users expectations? 10. how can we index your content? 11. how can we suggest better content? 12. why should I use new DSL language? 13. how can you make more money with us? 14. how can I migrate my data? ```