This project builds and deploys the Dynatrace easyTravel demo application in Docker. All components are readily available on the Docker Hub.
Component | Description |
---|---|
mongodb | A pre-populated travel database (MongoDB). |
backend | The easyTravel Business Backend (Java). |
frontend | The easyTravel Customer Frontend (Java). |
nginx | A reverse-proxy for the easyTravel Customer Frontend (NGINX). |
loadgen | A synthetic UEM load generator (Java). |
angularfrontend | The easyTravel Customer Frontend (Java,Angular). |
headleassloadgen | Headless load generator for Angular frontend using headless Chrome (Java). |
pluginservice | Optional component that keeps state of plugins. Used in case of multiple backend components (Java). |
mongodb-content-creator | Allows to create easyTravel database content in empty MongoDB database. |
You can run easyTravel by using Docker Compose with the provided docker-compose.yml
file like so:
docker-compose up
Aligning with principles of 12factor apps, one of them which requires strict separation of configuration from code, easyTravel can be configured at startup time via the following environment variables:
Component | Environment Variable | Defaults | Description |
---|---|---|---|
backend | ET_DATABASE_LOCATION | easytravel-mongodb:27017 | The location of the database the easyTravel Business Backend shall connect to. |
backend | ET_MONGO_AUTH_DB | admin | Name of the MongoDB authentication database |
backend | ET_DATABASE_USER | etAdmin | Name of the MongoDB user |
backend | ET_DATABASE_PASSWORD | adminadmin | MongoDB user password |
frontend | ET_BACKEND_URL | http://easytravel-backend:8080 | The URL to easyTravel's Business Backend. |
nginx | ET_FRONTEND_LOCATION | easytravel-frontend:8080 | The location of the Customer Frontend the easyTravel WWW server shall serve via port 80. |
nginx | ET_BACKEND_LOCATION | easytravel-backend:8080 | The location of the Business Backend the easyTravel WWW server shall serve via port 8080. |
loadgen | ET_WWW_URL | http://easytravel-www:80 | The URL to easytravel's Customer Frontend. |
loadgen | ET_BACKEND_URL | http://easytravel-www:8080 | The URL to easyTravel's Business Backend (optional). If provided, the problem patterns provided in ET_PROBLEMS will be applied consecutively for a duration of 10 minutes each. |
loadgen | ET_PROBLEMS | BadCacheSynchronization, CPULoad, DatabaseCleanup, DatabaseSlowdown, FetchSizeTooSmall, JourneySearchError404, JourneySearchError500, LoginProblems, MobileErrors, TravellersOptionBox |
A list of supported problem patterns, see below on how to activate. |
loadgen | ET_PROBLEMS_DELAY | 0 | A delay in seconds. When used with Dynatrace, it is suggested to use a value of 7500 (slightly more than 2 hours) so that Dynatrace can learn from an error-free behavior first. |
loadgen backend frontend |
ET_APM_SERVER_DEFAULT | APM | The type of used server. Can be "APM" for Dynatrace and "Classic" for AppMon |
loadgen | ET_VISIT_NUMBER | 5 | The number of visits generated per minute |
angularfrontend | ET_BACKEND_URL | http://easytravel-backend:8080 | The URL to easyTravel's Business Backend |
headlessloadgen | ET_ANGULAR_FRONTEND_URL | http://easytravel-www:9079 | The URL to easyTravel's Angular Frontend |
headlessloadgen | ET_APM_SERVER_DEFAULT | APM | The type of used server. Can be "APM" for Dynatrace and "Classic" for AppMon |
The following problem patterns are supported and triggered through the loadgen component, as described above:
Pattern | Description |
---|---|
BadCacheSynchronization | Activating this plugin causes synchronization problems in the customer frontend and uses a lot of CPU by doing an inefficient cache lookup. Activating this plugin should show a class 'CacheLookup' as doing lots of synchronization. |
CPULoad | Causes high CPU usage in the business backend process to provoke an unhealthy host health state. The additional CPU time is triggered in 8 separate threads independent of any searching/booking activity. |
DatabaseCleanup | Cleans out items where we continuously accumulate data in the Database, e.g. Booking and LoginHistory and keeps the last 5000 to avoid filling up the database over time. This is done every 5 minutes at the point where a Journey is searched. Usually this plugin is enabled by default, if you disable it, the database will fill up over time, especially if traffic is generated automatically. |
DatabaseSlowdown | Plugin which causes queries on locations to take longer. |
FetchSizeTooSmall | This plugin sets the fetchsize of the Hibernate persistence layer to 1 when executing database queries. This will cause inefficient select statements to show up on databases where otherwise Hibernate is optimizing fetches into bulks. |
JourneySearchError404 | Causes an HTTP 404 error code by returning an image name that does not exist when searching for journeys in the customer frontend web application. |
JourneySearchError500 | Throws an HTTP 500 server error if the journey search parameters are invalid, e.g. toDate is before fromDate |
LargeMemoryLeak | Causes a large memory leak in the business backend when locations are queried for auto-completion in the search text box in the customer frontend. Note: This will quickly lead to a non-functional Java backend application because of out-of-memory errors. |
LoginProblems | Simulates an execption when a login is performed in the customer frontend application. |
MobileErrors | Journey searches and bookings from mobile devices create errors. (no errors created for Tablets) |
TravellersOptionBox | Causes an 'ArrayIndexOutOfBoundsException' wrapped in an 'InvalidTravellerCostItemException' if in the review-step of the booking flow in the customer frontend, the last option '2 adults+2 kids' is selected in the combo-box for 'travellers'. |
Please refer to the Dynatrace-Docker project on how to quickly bring up an entire Dockerized Dynatrace environment. Then, use Docker Compose with the provided docker-compose-withDtAppMon.yml
file to have the application monitored by Dynatrace AppMon:
docker-compose -f docker-compose-withDtAppMon.yml up
Use build.sh
if you want to build easyTravel Docker images yourself.
The build-et.sh
script builds easyTravel deployment artefacts into a directory deploy
inside your current working directory, by default. You can override the default behavior by providing the following environment variables to the script:
Environment Variable | Defaults | Description |
---|---|---|
ET_SRC_URL | http://dexya6d9gs5s.cloudfront.net/latest/dynatrace-easytravel-src.zip | A URL to an easyTravel source distribution .zip file. |
ET_DEPLOY_HOME | ./deploy | A directory to contain the easyTravel deployment artefacts. |
ET_BB_DEPLOY_HOME | ./backend | A directory under ${ET_DEPLOY_HOME} to contain the easyTravel Business Backend deployment artefact (will be located in ${ET_DEPLOY_HOME}/${ET_BB_DEPLOY_HOME} ). |
ET_CF_DEPLOY_HOME | ./frontend | A directory under ${ET_DEPLOY_HOME} to contain the easyTravel Customer Frontend deployment artefact (will be located in ${ET_DEPLOY_HOME}/${ET_CF_DEPLOY_HOME} ). |
ET_ACF_DEPLOY_HOME | ./angularfrontend | A directory under ${ET_DEPLOY_HOME} to contain the easyTravel Customer Frontend (Angular) deployment artefact (will be located in ${ET_DEPLOY_HOME}/${ET_ACF_DEPLOY_HOME} ). |
ET_LG_DEPLOY_HOME | ./loadgen | A directory under ${ET_DEPLOY_HOME} to contain the easyTravel UEM load generator deployment artefact (will be located in ${ET_DEPLOY_HOME}/${ET_LG_DEPLOY_HOME} ). |
ET_HLG_DEPLOY_HOME | ./headlessloadgen | A directory under ${ET_DEPLOY_HOME} to contain the easyTravel headless Angular load generator (Java) deployment artefact (will be located in ${ET_DEPLOY_HOME}/${ET_HLG_DEPLOY_HOME} ). |
ET_MG_DEPLOY_HOME | ./mongodb | A directory under ${ET_DEPLOY_HOME} to contain the easyTravel pre-populated travel database (will be located in ${ET_DEPLOY_HOME}/${ET_MG_DEPLOY_HOME} ). |
ET_MGC_DEPLOY_HOME | ./mongodb-content-creator | A directory under ${ET_DEPLOY_HOME} to contain the easyTravel MongoDB Content Creator deployment artefact (will be located in ${ET_DEPLOY_HOME}/${ET_MGC_DEPLOY_HOME} ). |
ET_PS_DEPLOY_HOME | ./pluginservice | A directory under ${ET_DEPLOY_HOME} to contain the easyTravel Plugin Service deployment artefact (will be located in ${ET_DEPLOY_HOME}/${ET_PS_DEPLOY_HOME} ). |
./build-et.sh
export ET_BB_DEPLOY_HOME=. \
export ET_CF_DEPLOY_HOME=. \
export ET_ACF_DEPLOY_HOME=. \
export ET_LG_DEPLOY_HOME=. \
export ET_HLG_DEPLOY_HOME=. \
export ET_MG_DEPLOY_HOME=. \
export ET_MGC_DEPLOY_HOME=. \
export ET_PS_DEPLOY_HOME=. \
./build-et.sh
Use build-in-docker.sh
if you want to build easyTravel deployment artefacts in a build environment that runs in Docker, so you don't have to set up your own. Deployment artefacts can be found in a directory deploy
inside your current working directory. You can override the default behavior by providing environment variables to the script (the same variables as in Option A).
This offering is Dynatrace Community Supported. Feel free to share any problems, questions and suggestions with your peers on the Dynatrace Community's Application Monitoring & UEM Forum.
Licensed under the MIT License. See the LICENSE file for details.