Giter Site home page Giter Site logo

evrys's People

Contributors

erictg avatar zaba505 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Forkers

erictg

evrys's Issues

story(evrys): add helm chart

Description

As an end user, I want to be able to use helm when deploying evrys, so that deploying evrys to K8s is much simpler.

Acceptance Criteria

  • Chart can successfully deploy evrys to K8s
  • Deploy chart using workflow

Related Issues

  • depends on: #8

story(grpc): implement Append rpc

Description

As a dev, I want to implement the RecordEvent RPC, so that users can actually store events in some backing database.

Acceptance Criteria

  • RecordEvent RPC should validate the received cloudevent
  • RecordEvent RPC can append events to the EventStore
  • RecordEvent RPC should fail if appending the event fails

Related Issues

  • depends on: #54

story(dashboard): rough out base http server

Description

As a consumer, I would like to have dashboard, so that interacting with evrys for doing things like manually publishing an event can be done from a browser.

Acceptance Criteria

  • Dashboard service struct is defined
  • A Serve method is provided for quickly serving the Dashboard service (mimic gRPC implementation)
  • All unknown routes should return a 404 HTML page (for now that will be every route)

Related Issues

No response

story(evrys): configure github workflow

Description

As a developer, I want to automate the building, testing, deploying of evrys, so that it is all more reproducible.

Acceptance Criteria

  • Build
  • Test

Related Issues

story(devops): implement publish subcommand

Description

As a contributor to evrys, I want a publish subcommand, so that I can quickly and easily publish events or notifications to aid in my development and testing of new features or bug fixes.

Acceptance Criteria

  • evrys has subcommand, publish
  • publish does nothing

Related Issues

No response

story(devops): implement record events subcommand

Description

As a contributor to evrys, I want a record events subcommand, so that I can quickly and easily record events to aid in my development and testing of new features or bug fixes.

Acceptance Criteria

  • evrys has new subcommand chain, record events
  • has alias event
  • can record one or more events

Related Issues

No response

story(security): enable dependabot

Description

As a maintainer, I want to enable dependabot, so that it can help automate dependency management.

Acceptance Criteria

  • Dependabot is enabled
  • Dependabot can open and merge PRs for updating dependency versions

Related Issues

No response

story(security): enable codeql

Description

As a maintainer/contributor, I want to enable CodeQL, so that any all code can be automatically analyzed for any potential issues like hardcoded passwords.

Acceptance Criteria

  • CodeQL is enabled
  • For now default rules for Go are acceptable

Related Issues

No response

story(storage): support apache cassandra for recording events

Description

As an end user, I want evrys to record events to Apache Cassandra, so that I can deploy evrys in a cloud agnostic way.

Acceptance Criteria

  • Define PutEvent interface
  • Implement PutEvent interface for Apache Cassandra
  • Implement integration tests

Related Issues

No response

story(cmd/serve): add subcommand for serving rest api

Description

As a dev, I want to be able to serve a RESTful API, so that consumers can use a more familiar API.

Acceptance Criteria

  • rest subcommand is defined
  • RESTful API service is served when rest command runs

Related Issues

  • depends on: #36

story(storage): support mongodb for recording events

Description

As an end user, I want evrys to record events to mongodb, so that I can deploy evrys in a cloud agnostic way.

Acceptance Criteria

  • Implement PutEvent interface for mongodb
  • Integration test
  • No auth required
  • Add mongodb to readme

Related Issues

No response

story(build): migrate to bazel monorepo

Description

As a dev, I want to structure evrys as a monorepo, so that the future architecture changes can be implemented in the same repo as the primary service

Acceptance Criteria

  • Gazelle support for deps and build files
  • Folder structure should be migrated to monrepo structure

Related Issues

No response

story(evrys): event type allow list

Description

As an end user, I want to be able to define an event type allow list, so that I can better control which event types are allowed to be recorded by evrys.

Acceptance Criteria

  • RecordEvent RPC should deny events which are not listed in the allow list
  • An empty allow list should allow all events
  • Required fields: event type name and description

Related Issues

No response

story(rest): rough out base service implementation

Description

As a consumer, I want to interact with evrys through a RESTful API, so that I can leverage an API style I'm more used to.

Possible framework choice: gofiber

Acceptance Criteria

  • Rest service is defined
  • A Serve method is provided for quickly serving the Rest service (mimic gRPC implementation)
  • All unknown routes should return 404 (for now that will be every route) along with a JSON response body

Related Issues

No response

story(dashboard): rough out base graphql api

Description

As the dashboard, I want an API I can call which can then perform the appropriate actions against either the REST or gRPC evrys API, so that the dashboard can be evrys protocol agnostic.

Acceptance Criteria

  • Schema is defined
  • Resolvers are only roughed out (no actual calls to evrys are implemented)
  • API Handler is registered with dashboard HTTP server

Related Issues

  • depends on: #49

story(api): implement dummy grpc service

Description

As a client, I want to have an implementation of evrys which I can connect to, so that I begin doing some integration testing.

Acceptance Criteria

  • RecordEvent RPC - log and return successfully
  • GetEvent RPC - return event not found
  • SliceEvents RPC - return no events and close stream immediately

Related Issues

No response

story(devops): implement publish notification subcommand

Description

As a contributor to evrys, I want a publish notification subcommand, so that I can quickly and easily publish notifications to aid in my development and testing of new features or bug fixes.

Acceptance Criteria

  • evrys publish subcommand has new subcommand, notifications
  • has alias notification
  • can publish one or more notifications

Related Issues

  • depends on: #16

story(rest): implement slice events api

Description

As an end user, I want to retrieve multiple events using a RESTful API, so that I don't need to introduce a new tech (gRPC) to my existing stack.

Acceptance Criteria

  • RESTful route is defined
  • Should fetch events from eventstore
  • Same filtering options are supported as the gRPC API
  • Should return "200 OK" and the events as JSON in the response body
  • In case of failure, an appropriate code along with an JSON response object should be returned

Related Issues

  • depends on: #36

story(cmd): investigate cause for long test times

Description

As a dev, I want to investigate what's causing the cmd package tests to take a considerable amount of time, so that hopefully they can be sped up resulting in quicker GA workflow runtimes.

Acceptance Criteria

  • Cause of test execution slowness for cmd package is discovered
  • The root cause is documented in code comments (and added as a comment to this issue for tracking purposes)

Related Issues

No response

story(api): define grpc service

Description

As a client, I want to know the API details for evrys, so that I can begin implementing other services which use evrys.

Acceptance Criteria

  • Use of a standardized model for events
  • Define an event notification
  • RecordEvent RPC
  • ReadEvent RPC
  • ReadEvents RPC

Related Issues

No response

story(evrys): define contributing guidelines

Description

As a contributor, I want to know the expectations for making a contribution, so that I can easily make a contribution.

Acceptance Criteria

  • Document code styling
  • Document agile practices
  • Define commit message standards
  • Define other expected "best practices"
  • Also define developer standards in separate file

Related Issues

No response

story(evrys): enable discussions

Description

As a community member, I want to be able to engage others in less structured way than issues, so that I can hopefully share my thoughts or get answers to my questions quicker.

Acceptance Criteria

  • Discussions are enabled
  • Welcoming home page is defined
  • Add "Bug Reporting" page

Related Issues

No response

story(helm): event type allow list support

Description

As an end user, I want to provide the event type allow list as a config map, so that I can better track/version the allow list outside evrys.

Acceptance Criteria

  • User can provide a file
  • File is wrapped in a config map and provided to the evrys deployment

Related Issues

  • depends on: #

story(devops): implement publish events subcommand

Description

As a contributor to evrys, I want a publish event subcommand, so that I can quickly and easily publish events to evrys to aid in my development and testing of new features or bug fixes.

Acceptance Criteria

  • evrys publish subcommand has new subcommand, events
  • has alias event
  • can publish one or more events

Related Issues

  • depends on: #16

story(example/aws): create terraform module

Description

As a potential end user, I would like to be able to deploy evrys and all necessary infrastructure quickly and easily to AWS, so that I can play with and validate whether or not evrys is right for me.

Acceptance Criteria

  • Create IAM role
  • Grant DynamoDB access to IAM role
  • Grant SNS access to IAM role
  • Create DynamoDB table
  • Create SNS topic

Related Issues

No response

story(storage): support mongodb for reading events

Description

As a end-user, I want to be able to record and retrieve my events from MongoDB.

Acceptance Criteria

  • Should be able to get a single event by event id
  • Should be able to retrieve up until a timestamp
  • Should return a slice of events, an any cursor, and finally an error

Related Issues

No response

story(storage): support dynamodb for recording events

Description

As an end user, I want to use AWS DynamoDB for storing my events, so that I don't have to worry about replication, storage, etc. of events.

Acceptance Criteria

  • Able to put events into DynamoDB

Related Issues

No response

story(cmd/serve): read a config file

Description

As an end user, I want to be able to configure evrys through a config file, so that I can manage, track, and version that config file just like I would with any other code.

Acceptance Criteria

  • Persistent confg file flag is provided for all serve subcommands
  • PersistentPreRun middleware is provided for reading config file

Related Issues

No response

story(rest): implement get event api

Description

As an end user, I want to get an event using a RESTful API, so that I don't need to introduce a new tech (gRPC) to my existing stack.

Acceptance Criteria

  • RESTful route is defined for getting an event by its ID
  • Should fetch event from eventstore by ID
  • Should return "200 OK" and the event as a JSON object in the response body
  • In case of failure, an appropriate code along with an JSON response object should be returned

Related Issues

No response

story(grpc): implement RecordEventAndPublishNotification rpc

Description

As a dev, I want to implement the RecordEventAndPublishNotification RPC, so that users can actually store events in some backing database and publish notifications to some notification bus.

Acceptance Criteria

  • RecordEventAndPublishNotification RPC should validate the received cloudevent
  • RecordEventAndPublishNotification RPC can append events to the EventStore
  • RecordEventAndPublishNotification RPC can publish notifications to the Bus
  • RecordEventAndPublishNotification RPC should fail if appending the event fails
  • RecordEventAndPublishNotification RPC should fail if publishing the notification fails

Related Issues

  • depends on: #53
  • depends on: #54

story(evrys): initialize repo

Description

As an end user, I want to understand what this project is, so that I can determine if its useful for me.

Acceptance Criteria

  • README
  • Story issue template
  • LICENSE

Related Issues

No response

story(evrys): provide terraform module

Description

As an end user, I want to deploy evrys with Terraform, so that I can use a single tool to deploy evrys along with any of my other infrastructure.

Acceptance Criteria

  • Module wraps helm chart
  • Module has feature parity with helm

Related Issues

No response

story(evrys): add dockerfile

Description

As a end user, I want to be able to deploy evrys as a container, so that scaling it up or down is much simpler.

Acceptance Criteria

  • Image can be built
  • Container can be ran
  • gRPC endpoint is reachable
  • Publish image to ghcr.io using workflow

Related Issues

No response

story(helm): deploy rest service

Description

As a consumer, I want to be able to use a RESTful API with evrys, so that I don't need to introduce a new tech (gRPC) into my stack.

Acceptance Criteria

  • REST service is added to Deployment template
  • REST service is added to Service template
  • The REST service can be enabled through values file
  • The REST service port can be overridden through the values file

Related Issues

No response

story(cmd/serve): rough out subcommand for serving a dashboard ui

Description

As an end user, I'd like to interact with evrys through a web based dashboard, so that working with evrys is more approachable by everyone on my team.

Acceptance Criteria

  • dashboard command can take an address to listen for requests on
  • dashboard command is a subcommand of the serve command
  • dashboard command can take another address for connecting to evrys

Related Issues

No response

story(grpc): add rpc for record event and publish notification

Description

As an end user, I want to be more explicit with the side effects of recording events in evrys, so that I can help minimize resource consumption.

Acceptance Criteria

  • Add RecordEventAndPublishNotification RPC to service

Related Issues

No response

story(grpc): implement Iterate rpc

Description

As an end user, I want to be able to retrieve multiple events, so that I can process them myself.

Acceptance Criteria

  • Should return all events before a given timestamp
  • If given an empty timestamp, then default to the current time
  • Should internally handle recalling the db when events need to be paginated from db

Related Issues

No response

story(storage): support couchbase for recording events

Description

As an end user, I want evrys to record events to Couchbase, so that I can deploy evrys in a cloud agnostic way.

Acceptance Criteria

  • Implement PutEvent interface for Couchbase
  • Implement integration tests
  • Add couchbase to readme
  • No auth required

Related Issues

No response

story(grpc): support constructor config for event store implementation

Description

As a dev, I want to add a constructor config value for providing the gRPC service with the event store interface, so that the gRPC can be used with any event store implementation.

Acceptance Criteria

  • Define a new interface EventStore which combines the eventstore package interfaces into a single multi-method interface
  • gRPC service constructor has option for EventStore interface implementation

Related Issues

No response

story(rest): implement record event api

Description

As an end user, I want to record event using a RESTful API, so that I don't need to introduce a new tech (gRPC) to my existing stack.

Acceptance Criteria

  • RESTful route is defined for recording events
  • Should accept cloudevents as JSON request body
  • Should record events to the backing eventstore
  • Should return a "204 No Content" as long as the event is successfully recorded in the backing eventstore
  • In case of failure, an appropriate code along with an JSON response object should be returned

Related Issues

  • depends on: #36

story(grpc): add iterate filter for event id

Description

As an end user, I want to be able to retrieve individual events, so that I can incrementally process them myself.

Acceptance Criteria

  • Should return a single event by event id

Related Issues

No response

story(notifications): support apache kafka

Description

As an end user, I want to subscribe to notifications in Kafka, so that my infrastructure can be cloud provider agnostic.

Acceptance Criteria

  • Define NotificationBus interface
  • Implement NotificationBus interface for Apache Kafka
  • Add integration tests

Related Issues

No response

story(cmd/serve/dashboard): run dashboard service

Description

As a consumer, I would like to have dashboard, so that interacting with evrys for doing things like manually publishing an event can be done from a browser.

Acceptance Criteria

  • Dashboard service is serving on provided address from flag
  • Should shutdown is CLI context is cancelled
  • Should return error from Dasboard service

Related Issues

  • depends on: #49

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.