Giter VIP home page Giter VIP logo

devops-dojo / the-app Goto Github PK

View Code? Open in Web Editor NEW
93.0 15.0 376.0 22.25 MB

Sample application and CD Pipeline for DevOps Dojo

License: Apache License 2.0

Groovy 5.08% Shell 4.47% JavaScript 5.46% HTML 8.00% TypeScript 3.97% CSS 0.33% Io 0.68% Java 65.11% Scala 2.87% R 0.23% Ruby 1.21% Batchfile 0.03% CoffeeScript 2.26% Roff 0.32%
devops pipeline pipelines-as-code hubot reference-implementation

the-app's Introduction

Microservice Phone Shop Application and CD pipeline

Introduction

This application and its continuous delivery pipeline is used as training material during the DevOps Dojo green belt training.

Overview

This application gives software architects and developers an example how a microservice web application can look like and it simulates a development cluster, which contains continuous integration infrastructure as well as all necessary nodes that are needed to run an online shop. Thus it will furthermore shown, how a distributed online shop can deployed with a multi deployment pipeline and how the distributed system can be monitored. The application is based on the following two online shop applications, which can be found on Github:

Both project were combined to an new online shop that is indeed to sell mobile devices and implements the following use cases. A user is able to:

  • see different kinds of mobile devices catalogs (e.g. mobiles or tablets),
  • create a cart,
  • and order the created cart.

Use Case Online Shop

This use cases are implemented in the following two ways:

  • A Monolitic Webshop, which is represented by a three layered online shop based on Apache Wicket, the Spring Framework and Spring Data that implements all given use cases,
  • and microservice architecture, which is based on a mix of the Monolitic Webshop and a Microservice Catalog Frontend as it is shown in the below deployment diagram. In this mix a so called Microservice Catalog Frontend provides the use case that an user should be able to see the different mobile. Finally the Monolitic Webshop is used by the user to create an order that means Monolitic Webshop represents a microservice on its own for this specific use case. The Microservice Catalog Frontend is based on an AngularJS and Typescript which access different kinds of REST-Services that are implemented in Scala, Spray, Restx and Spring Boot.

Deployment Diagram Online Shop

Used technologies

For simplicity all services are supposed to run on a Java-VM at the moment.

  • Web frontend
    • Based on Angular JS and Typescript
  • Cart service
    • Based on Spring boot and Groovy
    • Redis backend via Spring Data
  • Product backend
    • Based on Scala and Spray
    • MongoDB backend via ReactiveMongo
  • Navigation backend
    • Based on Restx with embedded Jetty
    • MongoDB backend via Jongo

Directory Layout

The following directory layout shows only the important directories that are necessary to implement the given use cases in the overview.

microservice/           --> all files of the microservice applications are located in this folder
    frontend/           --> all microservice frontend applications are located in this folder
        catalog/        --> an AngularJS frontend application that shows the product catalog and is used to create a cart is located in this directory
        checkout/       --> all files that are needed to glue the checkout form of the monolithic to the microservice catalog frontend
    service/            --> all business services are located in the folder
        cart/           --> a spring boot cart rest service is located in the folder
        navigation/     --> a java based restx navigation rest service is located in the folder
        product/        --> a scala spray product rest service is located in the folder
monolithic/             --> all files of the monolithic application are located in this directory
vagrant/                --> Install the application and the continuous delivery pipeline (local VirtualBox or Microsoft Azure)

Prerequisites

You need some dependencies to run the application cluster or to add your own services to the showcase application.

###Running

See vagrant directory on installing the cluster of machines to run the application and the continuous delivery pipeline. You need at least 16 GB RAM to run the whole cluster in one machine (local virtualbox) or leverage the Azure cloud installer to have different VMs for each function.

If you just want to run the application, use Docker: Docker

The application

###Microservice Appserver

The microservice based online shop is deployed on the microservice appserver which is a reference implementation for the given use cases in the Overview. You can reach the online shop under the following url http://shop.microservice.io/.

Microservice Appserver

The microservice based online shop consists of two frontend parts as you can see in the deployment diagram in the overview section. The first part is an AngularJS Catalog Frontend that makes it possible to see a catalog for mobiles as well as a catalog for tablets. Furthermore a user is able to create a cart. If a user wants to order a created cart there is same clue logic in the monolithic web application that a cart which was created in the AngularJS Catalog Frontend can be order with the checkout of the Wicket online shop on the monolith appserver.

###Monolith Appserver

The monolith online shop is deployed on the Monolith Appserver which is a reference implementation for the given use cases in the Overview. You can reach the online shop under the following url http://shop.monolith.io:8080/shop/ .

Monolith Appserver

The Continuous Delivery pipeline

CI-Node

A Jenkins build server is running on the CI-Node. Jenkins is an open source continuous integration tool written in Java that provides a continuous integration services for software development which supports different SCM tools. Furthermore Jenkins can execute different build scripts like Gradle as well as arbitrary shell scripts and Windows batch commands.

You can reach the jenkins that builds and deploy the monolith and microservice application under the following url http://ci.microservice.io:8080/.

CI-Node

Monitoring Server

Monitoring a monolithic web application is no major pain as you can see in the monolith appserver section. A distributed web application, like it is shown in the microservice appserver section, is not so easy to monitor. In this small example there is a Ngnix web server that logs all request that comes into it. The Ngnix deliveries a AngularJS Catalog Frontend that represents a A single-page application (SPA). A SPA is a web application that fits on a single web page with the goal of providing a more fluid user experience akin to a desktop application. In addition to the SPA there are the three rest services a cart, product and a navigation service which are need for the different uses cases and are implemented in the programming languages Groovy, Scala and Java. This services must be alive that an user can see the products or create a cart. Furthermore there is a legacy JEE web application which is deployed in a Tomcat Webserver. An user can order its cart with that legacy JEE web application.

Icinga

Icinga is an open source network and computer system monitoring application. It was originally created as a fork of the Nagios system monitoring application. Icinga is attempting to get past perceived short-comings in Nagios development process, as well as adding new features such as a modern Web 2.0 style user interface, additional database connectors, and a REST API that lets administrators integrate numerous extensions without complicated modification of the Icinga core.

Icinga Status Map Icinga Status Report

Kibana

Kibana is a browser based analytics and search interface for Elasticsearch that was developed primarily to view Logstash event data. Logstash is a tool that can be used to collect, process and forward events and log messages. Collection is accomplished via number of configurable input plugins including raw socket/packet communication, file tailing and several message bus clients. Once an input plugin has collected data it can be processed by any number of filters which modify and annotate the event data. Finally events are routed to output plugins which can forward the events to a variety of external programs including Elasticsearch, local files and several message bus implementations.

Kibana

PSI Probe

Furthermore you can reach the PSI Probe monitoring and log analysis services under the following url http://shop.monolith.io:8080/probe/. The user credentials are admin / topsecret.

PSI Probe is a community-driven fork of Lambda Probe, which is intended to replace the Tomcat Manager and should make it easier to manage and monitor an instance of Apache Tomcat. PSI Probe does not require any changes to an existing app and it provides many features through a web-accessible interface that becomes available simply by deploying it to your server. These features include:

  • Requests: Monitor traffic in real-time, even on a per-application basis.
  • Sessions: Browse/search attributes, view last IP, expire, estimate size.
  • Logs: View contents, download, change levels at runtime.
  • Threads: View execution stack, kill.
  • JVM: Memory usage charts, advise GC.

Probe Probe

JETM

JETM performance monitor JETM is at the following url http://shop.monolith.io:8080/shop/performance/. JETM is a small and free library that is included in the monolith online shop, that helps locating performance problems in existing Java applications. JETM enables developers to track down performance issues on demand, either programmatic or declarative with minimal impact on application performance, even in production.

JETM Overview JETM Request view

JMX

JMX is a natural way to have access to technical management, e.g. for tuning, statistics, log levels and so on. Unfortunately, it lacks a lightweight tool to expose mbeans and to browse them securely on any application and environment without heavy infrastructure setup. JMiniX provides such a feature. You can reach JMiniX under the following url http://shop.monolith.io:8080/shop/jmx/.

JMiniX

Credits

A lot of this repository leverages the work from Bernd Zuther.

Contact

If you have any questions or remarks, please use the issue tracker

Licensing

This work is open source, and is licensed under the Apache License, Version 2.0.

the-app's People

Contributors

arneluehrs avatar chavezom avatar clarsonneur avatar ebarrielle avatar luisgtz avatar ojacques avatar shivaprasadlk avatar slawekzachcial avatar snyk-bot 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  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  avatar  avatar  avatar  avatar  avatar

the-app's Issues

Jenkins job shop-monolitic-ui-test fails - Xvfb error

Xvfb configuration fails during initial Ansible install. This leads to Jenkins job to run UI tests to fail.
Error:

ERROR: No Xvfb installations defined, please define one in the configuration. Once defined you’ll need to choose one under Advanced options for Xvfb plugin job settings and save job configuration.
Archiving artifacts
Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered

Once you fix this config in Jenkins manually, the job proceeds further.

Error when microservices register with monitoring d.c.b.a.s.SpringBootAdminRegistrator

Getting errors in the log of navigation, cart and product microservices:

Failed to register application as [id=null, url=http://app-server-node-4:18090, name=navigation-microservice] at spring-boot-admin (http://monitoring.microservice.io:8080//api/applications): I/O error on POST request for "http://monitoring.microservice.io:8080/api/applications":Connection refused; nested exception is java.net.ConnectException: Connection refused

ChatOps Deploy

Allow deployment from ChatOps:

  • Command to deploy (trigger Jenkins job to deploy) (done - see this)
  • Feedback loop from Jenkins Deploy jobs to ChatOps (by issuing a curl to Hubot pubsub, like here. Add a "deployment started" (beginning of Jenkins job) and "deployment done" (end of Jenkins Job)
  • Deploy script to log an event in the logs or to REDIS, so that deploy markers are visible in the Kibana dashboard

Add Kibana Dashboard functions

  • Add "Discount" on/off flag
  • Add micro services virtual server logs, show 2 bars with #of access log, to show traffic
  • Add Cart conversion indicator
  • CPU/Networking?

Add unit tests

Unit tests for monolithic app are there but not executed.
Need to restore them so that they are run and visible in Jenkins.

Enable A/B testing

Enable A/B testing for shopping app. See https://fr.wikipedia.org/wiki/Test_A/B
Goal is to show the promotion banner on top of the cart, for only a percentage of the visitors.

  • Proper NGINX config for "current_A" and "alternative_B"
  • Update microservice\frontend\catalog\app\partials\cart.html to show discount if enabled
  • Update Debian packaging to include 2 sites alternative

Cart service can be unavailable

After fresh pipeline deploy, and deployment of the app to test and production, the cart microservice can be "unavailable".
This is caused by the REDIS service, running on dbserver which is not effectively running.

  • Add a monitoring in icinga
  • Have a restart procedure for all services, including dbserver services

Vagrant plugin install fails on Windows behind proxy

When trying to install Vagrant plugins as specified in the install doc, one can get an error:

Installing the 'vagrant-hostsupdater' plugin. This can take a few minutes...
Bundler, the underlying system Vagrant uses to install plugins,
reported an error. The error is shown below. These errors are usually
caused by misconfigured plugin installations or transient network
issues. The error from Bundler is:

Unable to resolve dependency: user requested 'vagrant-hostsupdater (> 0)'

Test

Test to post messages from Jenkins using Github pull request builder

Icinga reports disk errors

Getting errors in Icinga dashboard for the apps, with Disk being critical:

DISK CRITICAL - /sys/kernel/debug/tracing is not accessible: Permission denied

Vagrant Virtualbox error: Failed to open/create the internal network

When provisioning infrastructure on Windows with Virtualbox on Windows 10, one can get an error message.

VBoxManage.exe: error: Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter #5' (VERR_INTNET_FLT_IF_NOT_FOUND).```

ElasticSearch role is not idempotent and injects cluster.name multiple times

The role step, if run multiple times (multiple playbook executions) adds cluster.name: ... multiple times. This may lead to cluster name conflicts when running multiple instances in the same network.

A better approach to this would be to add cluster.name into the step that is before so it looks like:

- name: insert/update elasticsearch configuration block
  blockinfile:
    dest: /etc/elasticsearch/elasticsearch.yml
    block: |
      http.cors.enabled: true
      http.cors.allow-origin: http://monitoring.microservice.io
      cluster.name: {{ 100000 | random | to_uuid }}

and remove the step that does it today.

Update to ELK 5.x stack

For the business dashboard, we want to

  • update to ELK 5.x stack
  • Update existing home dashboard

jumpstation users issues:

  • dojo1/dojo2 shell should be bash to fix history, recall last command, etc...
  • TAB key does not do autocompletion in VNC but CTRL-I does
  • Chrome / Firefox profile is missing some shortcuts and passwords

Sign In functionality not working

Step 1 : Logout from the shop if already logged in.
Step 2 : Click the "Sign in" link in the top right corner of the screen
Step 3 : Do not enter any user id / password and click "Sign In"

Expected Result : The user should be signed in if the correct credentials are provided or an error should be shown for the user to correct his/her details.

Actual Result : The screen becomes unresponsive.

User Story 2

John from marketing requested sent an email I wat to
Test paypal payment options in the cart so that
I can verify if I need to conclude my partnership with PayPal

Ansible provisioning of ci-node fails

When provisioning CI Node with Ansible, it fails with error:

==> buildserver: TASK [jenkins : install pre-requisites] ****************************************
==> buildserver: failed: [ci-node] (item=[u'docker.io', u'golang', u'python-pip', u'xvfb', u'firefox=45.0.2+build1-0ubuntu1', u'git', u'curl', u'nodejs=0.12.17-1nodesource1~xenial1', u'ruby', u'ruby-dev']) => {"cache_update_time": 1484095048, "cache_updated": false, "failed": true, "item": ["docker.io", "golang", "python-pip", "xvfb", "firefox=45.0.2+build1-0ubuntu1", "git", "curl", "nodejs=0.12.17-1nodesource1~xenial1", "ruby", "ruby-dev"], "msg": "'/usr/bin/apt-get -y -o \"Dpkg::Options::=--force-confdef\" -o \"Dpkg::Options::=--force-confold\"  --force-yes   install 'docker.io' 'golang' 'python-pip' 'xvfb' 'firefox=45.0.2+build1-0ubuntu1' 'nodejs=0.12.17-1nodesource1~xenial1' 'ruby' 'ruby-dev'' failed: E: Version '0.12.17-1nodesource1~xenial1' for 'nodejs' was not found\n", "stderr": "E: Version '0.12.17-1nodesource1~xenial1' for 'nodejs' was not found\n", "stdout": "Reading package lists...\nBuilding dependency tree...\nReading state information...\n", "stdout_lines": ["Reading package lists...", "Building dependency tree...", "Reading state information..."]}
==> buildserver:        to retry, use: --limit @/provision/buildserver.retry
==> buildserver:

Issue is with the NodeJS package: E: Version '0.12.17-1nodesource1~xenial1' for 'nodejs' was not found

infra as code

  • haproxy
  • docker
  • haproxy config static with 2 nodes
  • new node.

Build job shop-microservice-navigation-service-build fails

Build job of "shop-microservice-navigation-service-build" fails.

Error is

+ ./gradlew -p microservice/service/navigation prepareDeb buildDeb
Parallel execution is an incubating feature.
:buildSrc:compileJava UP-TO-DATE
:buildSrc:compileGroovy UP-TO-DATE
:buildSrc:processResources UP-TO-DATE
:buildSrc:classes UP-TO-DATE
:buildSrc:jar UP-TO-DATE
:buildSrc:assemble UP-TO-DATE
:buildSrc:compileTestJava UP-TO-DATE
:buildSrc:compileTestGroovy UP-TO-DATE
:buildSrc:processTestResources UP-TO-DATE
:buildSrc:testClasses UP-TO-DATE
:buildSrc:test UP-TO-DATE
:buildSrc:check UP-TO-DATE
:buildSrc:build UP-TO-DATE
:microservice:service:navigation:compileJava UP-TO-DATE
:microservice:service:navigation:compileGroovy UP-TO-DATE
:microservice:service:navigation:processResources UP-TO-DATE
:microservice:service:navigation:classes UP-TO-DATE
:microservice:service:navigation:jar UP-TO-DATE
:microservice:service:navigation:findMainClass
:microservice:service:navigation:startScripts UP-TO-DATE
:microservice:service:navigation:installApp UP-TO-DATE
:microservice:service:navigation:prepareDeb UP-TO-DATE
:microservice:service:navigation:buildDeb FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Some problems were found with the configuration of task ':microservice:service:navigation:buildDeb'.
> Directory '/var/lib/jenkins/jobs/shop-microservice-navigation-service-build/workspace/microservice/service/navigation/debian/control' specified for property 'controlDirectory' does not exist.
> File '/var/lib/jenkins/jobs/shop-microservice-navigation-service-build/workspace/microservice/service/navigation/debian/changelog' specified for property 'changelogFile' does not exist.

The issue is that debian packaging fails, as the directory structure "debian" is not there.
Here is another microservice with the proper directory structure: https://github.com/devops-dojo/the-app/tree/master/microservice/service/cart/debian

I'm not sure if we need to fix it (ie, does the microservice need to be installed with a deb package?), or if we should just disable this job.

ERROR i.g.z.a.s.u.t.m.TrackingServiceImpl - Error occurred while tacking

Logs filling with errors on Monolithic app server, in /var/log/tomcat7/appstash.log:

Error occurred while tacking
java.lang.NullPointerException: null
        at io.github.zutherb.appstash.shop.ui.tracking.mixpanel.TrackingServiceImpl.trackProductView(TrackingServiceImpl.java:104) ~[classes/:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_25]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_25]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_25]
        at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_25]
        at org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:480) [wicket-ioc-7.0.0-M6.jar:7.0.0-M6]
        at com.sun.proxy.$Proxy57.trackProductView(Unknown Source) [na:na]
        at io.github.zutherb.appstash.shop.ui.page.catalog.ProductCatalogPage.onBeforeRender(ProductCatalogPage.java:68) [classes/:na]
        at org.apache.wicket.Component.internalBeforeRender(Component.java:949) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.Component.beforeRender(Component.java:1017) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.Component.internalPrepareForRender(Component.java:2214) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.Page.internalPrepareForRender(Page.java:242) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.Component.render(Component.java:2303) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.Page.renderPage(Page.java:1018) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:124) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:195) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:865) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) [wicket-request-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:265) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:222) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284) [wicket-core-7.0.0-M6.jar:7.0.0-M6]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [tomcat-catalina-7.0.68.jar:7.0.68]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [tomcat-catalina-7.0.68.jar:7.0.68]
        at etm.contrib.integration.web.HttpRequestPerformanceFilter.doFilter(HttpRequestPerformanceFilter.java:74) [jetm-optional-1.2.3.jar:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [tomcat-catalina-7.0.68.jar:7.0.68]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [tomcat-catalina-7.0.68.jar:7.0.68]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316) [spring-security-web-4.0.0.RELEASE.jar:na]

Rename / refactor vagrant to infra

All of the provisioning activity is handled in the "vagrant" directory, which now supports other provisioning mechanisms than vagrant.
One need to rename this directory to "infra" and refactor accordingly.

Be able to test a Pod

Code used to test pod ssh connection:
sudo su - dojo1 -c '
ssh -o StrictHostKeyChecking=no hos@ci-node exit 2>/dev/null || echo ci-node ;
ssh -o StrictHostKeyChecking=no hos@ci-repo exit 2>/dev/null || echo ci-repo ;
ssh -o StrictHostKeyChecking=no hos@monitoring-node exit 2>/dev/null || echo monitoring-node ;
ssh -o StrictHostKeyChecking=no hos@mongodb-node exit 2>/dev/null || echo mongodb-node ;
ssh -o StrictHostKeyChecking=no hos@app-server-node-1 exit 2>/dev/null || echo app-server-node-1 ;
ssh -o StrictHostKeyChecking=no hos@app-server-node-2 exit 2>/dev/null || echo app-server-node-2 ;
ssh -o StrictHostKeyChecking=no hos@app-server-node-3 exit 2>/dev/null || echo app-server-node-3 ;
ssh -o StrictHostKeyChecking=no hos@app-server-node-4 exit 2>/dev/null || echo app-server-node-4'

Add traffic with orders being placed

To provide a realistic environment, one should get simulated users which are placing orders.
This traffic needs to run against "production" environment with a configurable rate.
Will use Jenkins / Hubot host for that.

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.