Code Monkey home page Code Monkey logo

vehicle-fleet-demo's Introduction

Vehicle Fleet

Demo system for RentMe fleet of connected rental trucks. Each truck in our fleet sends us telemetry data updates, including location, heading and various internal indicators, including whether of not a service is required. The user can browse all the vehicle locations via a zoomable map with an inset containing all the vehicle details. Vehicles that need a service are shown in orange or red depending on the urgency of the repairs. Service stations can be shown on the map by selecting a menu item.

Architecture

Architecture Diagram

Building from Source

This application uses a Maven-based build system. Please ensure Java 8 is installed and use the wrapper script (mvnw in the root of the project).

Prerequisites

NOTE: You can run the middleware in docker containers using docker-compose (works best on a Linux host because otherwise you need to configure the host because it isn't localhost with boot2docker).

Check out sources

$ git clone https://github.com/springone2gx2015/vehicle-fleet-demo.git
$ cd vehicle-fleet-demo

Compile, test and build all jars

$ ./mvnw clean install

Running

Each of the projects has a jar file in its target/ directory. Run it with java -jar. There are platform services (in platform/*) that are needed if you run the application in the "default" profile. You can run locally without them if you use the "test" profile (e.g. --spring.profiles.active=test on the command line). In Cloud Foundry the platform services are provided by Spring Cloud Services (available as a tile in PCF).

Locally

Module Dashboard URL
Eureka http://localhost:8761/
Config Server http://localhost:8888/
fleet-location-service http://localhost:9000/
service-location-service http://localhost:9001/
fleet-location-simulator http://localhost:9005/
fleet-location-ingest http://localhost:9006/
fleet-location-updater http://localhost:9007/
RabbitMQ http://localhost:15672/
MongoDB http://localhost:27017/
Dashboard http://localhost:8080/

In order to run the entire application locally please execute the following steps:

Please ensure that you have running:

  • Rabbit - for the simulator, ingest and updater components
  • Mongo - for the service-location-service

Use The Start Script

to run all services on localhost:

$ scripts/startAll.sh

to stop:

$ scripts/stopAll.sh

Start Manually

NOTE: the dashboard UI can run on it's own with just the fleet-location-service and service-location-service (if you run in a "test" profile) and with those 2 plus eureka (in the "default" profile).

Start Eureka

$ java -jar platform/eureka/target/fleet-eureka-server-0.0.1-SNAPSHOT.jar

fleet-location-simulator

$ java -jar fleet-location-simulator/target/fleet-location-simulator-1.0.0.BUILD-SNAPSHOT.jar

fleet-location-ingest

$ java -jar fleet-location-ingest/target/fleet-location-ingest-1.0.0.BUILD-SNAPSHOT.jar

fleet-location-updater

$ java -jar fleet-location-updater/target/fleet-location-updater-1.0.0.BUILD-SNAPSHOT.jar

fleet-location-service

$ java -jar fleet-location-service/target/fleet-location-service-1.0.0.BUILD-SNAPSHOT.jar
$ wget http://assets.springone2gx2015.s3.amazonaws.com/fleet/fleet.json
$ curl -H "Content-Type: application/json" localhost:9000/fleet -d @fleet.json

service-location-service

$ java -jar service-location-service/target/service-location-service-1.0.0.BUILD-SNAPSHOT.jar
$ wget http://assets.springone2gx2015.s3.amazonaws.com/fleet/serviceLocations.json
$ curl -H "Content-Type: application/json" localhost:9001/bulk/serviceLocations -d @serviceLocations.json

dashboard

$ java -jar dashboard/target/dashboard-1.0.0.BUILD-SNAPSHOT.jar

If you go to the Eureka Dashboard, you should see all services registered and running:

http://localhost:8761/

Please ensure all services started successfully. Next, start the simulation using the service-location-simulator application, either through the simple UI at http://localhost:9005/ or by executing:

$ curl http://localhost:9005/api/dc

You should now be able to see the moving vehicles inside the main Dashboard application:

http://localhost:8080/

Dynamic Config Changes when running locally

The fleet-location-updater makes calls to service-location-service and uses Hystrix to provide fault tolerance. Hystrix can be fine-tuned using various properties:

https://github.com/Netflix/Hystrix/wiki/Configuration

In conjunction with Spring Cloud Config, you can changes those properties at runtime as well.

Please ensure that you have Config Server running. Also, in order to simplify things, you may want to point directly to a local Git with the configuration settings used by Config Server.

E.g. in vehicle-fleet-demo/platform/configserver/src/main/resources/application.yml change the value of property spring.cloud.config.server.git.uri to your local repo such as: file://${HOME}/dev/git/vehicle-fleet-demo.

In vehicle-fleet-demo/config-repo/fleet-location-updater.yml we define a property hystrix.command.default.circuitBreaker.forceOpen: false. By setting this property to true we can simulate a failure and consequently the Hystrix fallbackMethod handleServiceLocationServiceFailure will be called in DefaultServiceLocationService, even though the service-location-service may still be running fine.

Once you change the configuration in fleet-location-updater.yml, you must refresh the configuration by posting to the /refresh endpoint:

$ curl -d{} http://127.0.0.1:9007/refresh

You can see configuration changes for the fleet-location-updater by going to http://localhost:9007/env

vehicle-fleet-demo's People

Contributors

boykoalex avatar ghillert avatar graemerocher avatar lemonrains avatar markfisher avatar mbogoevici avatar

Watchers

 avatar  avatar

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.