23 Feb 2022
01:46 PM
- last edited on
20 Jun 2023
01:14 PM
by
tomasz_wieremje
easyTravel is a state-of-the-art demo application for Dynatrace. It helps you evaluate or showcase Dynatrace with a realistic heterogeneous multi-tier web application.
easyTravel provides a web portal that allows users to log in, search for journeys to various destinations, select promotional journeys directly that are offered, and book a journey using credit card details.
Additionally, a Business-to-Business (B2B) web portal for travel agencies is provided where travel agencies can manage the journeys that they offer and can review reports about made bookings.
easyTravel is a multi-tier application implemented in .NET and Java. The starting of the various tiers and the enabling/disabling of different problem pattern plugins is done via a separate easyTravel Launcher.
The Launcher allows the user to conveniently switch between different demo scenarios. Each scenario can define load scripts and certain problem pattern plugins that are enabled. The scenarios can be modified or extended by changing an XML file. This is useful when giving demos and allows you to focus on problem areas that are particularly relevant for a specific demo.
Search and book a journey on the easyTravel web frontend with a realistic multi step booking process.
Start all the tiers of easyTravel and enable architecture and performance flaws by selecting a pre-configured scenario.
Check latest published version here:
README.txt
Linux installer
Windows installer
Please see this page for the security updates in easyTravel: easyTravel security updates.
You should disable monitoring of launcher (com.dynatrace.easytravel.launcher.jar easyTravel (x*)) and weblauncher (com.dynatrace.easytravel.weblauncher.jar easytravel-*-x*) processes. Otherwise, there will be no connection between application and services.
Disable process monitoring.
Only needed if you need mobile app traffic.
You have to edit "C:\Program Files\Dynatrace\easyTravel (x64)\resources\easyTravelConfig.properties"
Set following configuration properties for SaaS:
config.apmServerDefault = APM
config.apmServerHost=live.dynatrace.com
config.apmServerWebPort=443
config.apmServerPort=443
config.apmServerWebURL=https://live.dynatrace.com:443
config.apmTenant=<tenant_name>
When connecting to the Dynatrace Managed server:
config.apmServerDefault = APM
config.apmServerHost=<managed_server_host>
config.apmServerWebPort=443
config.apmServerPort=8443
config.apmServerWebURL=https://<managed_server_host>:443
config.apmTenant=<environment_id>
➡️Error during installation: "Error writing to file: UltiDevCassiniHttpRequestProcessor2.0.dll. Verify that you have access to that directory."
Ensure that Microsoft IIS (Internet Information Server) is installed and working and ensure that .NET Framework 2.0 or higher is installed.
➡️Apache HTTPD does not start, error "An operation was attempted on something that is not a socket" in error.log
This indicates that some other installed software interferes with socket network calls. A workaround is to add the following additional setting to the Apache HTTP config file at <installation_location>/apache2.2/plain_conf/plain_httpd.conf
Win32DisableAcceptEx
For details, see the Apache Documentation.
➡️Internet Explorer 9 displays some pages incorrectly in compatibility mode
If Internet Explorer displays some pages with incorrect layout, (e.g. text-fields in one of the login screens are displaced or login box is displayed behind other content), you likely run Internet Explorer in "compatibility mode", where it simulates an Internet Explorer 7.
You can disable compatibility mode by clicking the blue "broken page" icon so that it is displayed in gray again.
➡️.NET Applications do not fully start on an Windows XP or Windows Server 2003 instance
See easyTravel on Windows XP and 2003 for a detailed description of the problem and a number of possible workarounds.
➡️.NET Applications do not start - "An attempt was made to access a socket in a way forbidden by its access permissions"
This problem is likely to be caused by IIS running dotNetBackend and dotNetFrontend thus blocking the port the backend is trying to use. The frontend just gets assigned another port.
➡️"Error while checking Credit Card - The system cannot find the file specified"
In 3.5.1 this can indicate that you need to update your Agent to the latest version in order to make ADK/C++ instrumentation work correctly. I.e. you should at least install the Update "April 2011", make sure to also update the agent dlls as well.
If you rather stay with the current agent and would like to work around this problem you can go to the Problem Patterns tab in the easyTravel launcher and deactivate the plugins “NamedPipeNativeApplication” and “NamedPipeNativeApplication.NET” and instead activate “DummyNativeApplication” and “DummyNativeApplication.NET”
➡️.NET Applications running slow on Firefox
If the .NET-Application seems to be running slow in Firefox on localhost, try using the ip-address instead or add localhost to network.dns.ipv4OnlyDomains in the Firefox configuration, enter the following in the address bar "about:config" to access Firefox configuration.
➡️iOS easyTravel App does not install
This problem is likely to be caused by multiple network interfaces (e.g. from VMWare) on the easyTravel host. To override the host auto detection for the iOS App download configure appleMobileHost in C:\Program Files (x86)\dynaTrace\EasyTravel\resources\easyTravelConfig.properties to the IP address of your easyTravel frontend.
➡️iOS easyTravel App does not install due to connection error
You are getting an error like "Cannot connect to x.x.x.x" or "Cannot install applications because the certificate for x.x.x.x is not valid". This problem is caused by apple by requiring an SSL-Connection to install the app via direct link. You have install the self-signed SSL-Certificate, which can be found in the “iOS App Installation”-section on the "About"-page.
The overall architecture consists of:
Estimated main memory usage of default scenario, measured as "process private bytes" on Windows OS:
Application
Technology
Memory
Launcher (includes Java DB) |
Java/SWT |
225MB |
Customer Frontend |
Java/Tomcat |
<190MB |
Business Backend |
Java/Tomcat |
<190MB |
Credit Card Authorization |
C++/ADK |
<1MB |
Payment Backend |
.NET/MVC |
65MB |
B2B Frontend |
.NET/MVC |
65MB |
Overall |
- |
<800MB |
The easyTravel Launcher starts up all the processes for the different tiers and also allows a user to enable/disable different problem patterns - known as plug-ins. A configuration of running processes and plug-ins is called a scenario.
In order to focus the demo to the interests of the audience, the scenarios are grouped. By default the easyTravel Launcher offers two scenario groups:
Sometimes the default scenarios and groups may not fit your needs. Maybe your audience is not interested in .NET or you want to enable a certain plugin to demonstrate special Dynatrace capabilities. In this case, you have the possibility to set up your own scenarios and groups.
On the first startup of the easyTravel Launcher a default scenario configuration file is created. The scenarios.xml file can be found in USER_HOME\.dynaTrace\easyTravel <version>\easyTravel\config. In order to customize your scenario setup you can edit this configuration.
⚠️
Because the easyTravel Demo Application and consequently the default scenario configuration may change in further versions, your customized file might be replaced by a new configuration file after an update. The old configuration file is backed up in the original directory.
Since easyTravel for 4.2, you can put your scenario-definitions in a file userScenarios.xml in the config directory and thus avoid this overwriting.
Scenario File Structure
The scenario.xml consists of nested group and scenario tags. The following excerpt shows a common structure:
<group order="1" title="Group Title">
<scenario enabled="true" order="1" title="Scenario Title">
<description>Scenario Description</description>
<procedure id="inprocess DBMS" order="1"/>
<procedure id="database content creator" order="2"/>
<procedure id="business backend" order="3"/>
<procedure id="customer frontend" order="4"/>
<procedure id="credit card authorization" order="5"/>
<procedure id="payment backend" order="6"/>
<procedure id="b2b frontend" order="7"/>
</scenario>
</group>
The procedure elements describe the tiers of the scenario. The order attribute of the group and scenario elements define the sequence they are listed in the easyTravel Launcher. The order attribute of the procedure elements defines the startup sequence of the tiers.
Customization Example
Let's assume we want to define a new group with a single scenario. The scenario should run without B2B Frontend and the "SmallMemoryLeak" plugin has to be enabled in order to simulate a memory leak:
<group order="1" title="Example Group">
<scenario enabled="true" order="1" title="Example Scenario">
<description>This is an example scenario</description>
<procedure id="inprocess DBMS" order="1"/>
<procedure id="database content creator" order="2"/>
<procedure id="business backend" order="3">
<setting name="SmallMemoryLeak" type="plugin" value="on"/>
</procedure>
<procedure id="customer frontend" order="4"/>
<procedure id="credit card authorization" order="5"/>
<procedure id="payment backend" order="6"/>
</scenario>
</group>
Settings on Procedure Level
Procedures support a few specific settings and additionally allow to override any of the global properties that you have in the easyTravelConfig.properties file.
Specific settings are available for the following types of procedures:
<setting name="DatabaseCleanup" type="plugin" value="off"/>
<setting name="DummyPaymentService" type="pluginhosts" value="dynaday13fall" />
Setting global properties on procedure-level via type="procedure_config" only makes sense if you have multiple procedures of the same type and want to set different settings for these or if you use multiple scenarios and one of them requires different settings. Otherwise it is probably easier to specify them in the global property file, ideally in a easyTravelLocal.properties in the C:\Users\...\config directories.
: 2.0.0.2660
Solved! Go to Solution.
02 May 2022 09:28 PM
Hello Links to download EasyTravel is returning a error page.
09 Mar 2023 05:20 PM
Hi, another method that worked for me was installing the new version for Linux easyTravel with Docker. A full tutorial can be found here.
03 May 2022 01:34 AM
I am with @crazlaz
Links to download and also to readme.txt are not working, Linda. Please check and update the latest ones. That would be great to share the post with everyone.
03 May 2022 05:01 PM
Hi, I am also triying to download EasyTravel and once I try to access the links it gives and error page.
Thanks
05 May 2022 12:48 PM
The download links should work again 😉
13 May 2022 03:11 PM
Would we put Customer Frontend, Business Backend, and Business Database components into different servers? How will we update the application configurations please?
Thanks.
25 Jun 2022 07:33 AM
Hi, I've tried to run easyTravel on Raspberrypi 4 with Ubuntu 22.04. The installation process was successful but I was not able to run it because of an error:
sudo ~/easytravel-2.0.0-x64/weblauncher/weblauncher.sh
/home/ubuntu/easytravel-2.0.0-x64/weblauncher/weblauncher.sh: 13: ../jre/bin/java: Exec format error
Can easyTravel be deployed on Raspberry Pi? Did you have the same issue?
27 Jun 2022 07:14 AM
Yes it should work irrespective of its underline hardware until you are running the supported OS and the proper supported execution command for that respective OS.
09 Aug 2022 08:44 AM
Hi, I am trying to start the application on CentOs Linux 7 hosted on AWS(noGUI). Getting an error :
WebLaunche WARN [DocumentStarter] Exception occurred while opening URL: http://localhost:8094/. Exception: Cannot run program "firefox": error=2, No such file or directory
Can anyone plz provide a solution for this?
09 Aug 2022 08:52 AM
Hi... Can it be that it is a CentOs without UI only terminal? There is no Firefox installed and can not be used.
09 Aug 2022 09:06 AM
yes. Is there any way to start the app?
09 Aug 2022 09:31 AM
As far as I know a GUI is required to run and configure the app. Unfortunately I don't know a workaround (if any exists) to launch the app without a browser.
11 Aug 2022 09:31 AM - edited 11 Aug 2022 10:27 AM
You can run the app by executing the runEasyTravelNoGUI.sh script located in the root directory, but no configuration options are available if you use this method.
What I have seen is that no browser traffic is generated this way, but you can access the easyTravel page by browsing to http://<your_easytravel_host_ip>:8079, which should load up the page and RUM data comes through.
12 Apr 2023 07:52 AM - edited 22 Aug 2023 10:43 AM
sudo dnf groupinstall workstation
sudo systemctl set-default graphical.target
sudo yum install java-1.8.0-openjdk chromium firefox screen
sudo reboot
You can run weblauncher.sh from terminal without GUI, but it needs to be installed so the chromium process can use it.
15 Aug 2022 07:24 AM
Considering you are using a virtual machine... You can open ports 8094 and 8079 required for the application in your security group and access the application using the public_ip:8094 in any browser. By default it tried to locate firefox application irrespective of OS you use. I hope this helps.
20 Oct 2022 08:47 AM
Hi, I installed easyTravel on a centos on azure.
I would like that the loadgenerator is presented to the app towards the public IP instead of localhost.
Is this possible?
This would save me from doing manual traffic and creating synthetics to simulate it.
Regards,
Davide
28 Oct 2022 10:58 AM
For completeness' sake and to help others who may have the same request, see the solution to this question here
07 Dec 2022 03:50 PM
Good day, can you help me to know what minimum hardware requirements must have the linux and windows servers for Easy travel to work without problems? Thank you.
07 Dec 2022 06:30 PM
Hi @Lufecita22, the memory requirement for the easyTravel components is around 800MB as measured on Windows using the default scenario, according to the table in the original post. Keep in mind that some scenarios may require more or less memory to run, it depends on what the scenario entails.
From my own tests, I'd say a bare minimum of 2GB memory on Linux, and 4GB memory on Windows. For both Linux and Windows, 2 CPU cores (vCPUs) should suffice. If you find that these values don't work, let us know your experience and settings 🤓
07 Dec 2022 08:26 PM
@andre_vdveen I agree with you 100% and is the exact same experience I've had. And those i would say are the absolute minimum (2GB Linux, 4GB Windows). Anything less I get some very odd behavior from the system and moments of unresponsiveness, such that I've had to -9 the VM.
To be reliable, on Windows, I've had to run at 8GB. 8GB is costly so that means I can't run it all the time, instead only when I need it. Even so, it's worth it, this is a really cool tool Dynatrace provides and happy to see are maintaining it.
19 Dec 2022 03:42 PM
Where can i find what versions of linux are supported?
Getting this:
sudo /bin/bash installChromeDeps.sh
Sorry, Ubuntu 22.04 LTS is not supported.
31 Mar 2023 04:00 PM - edited 22 Aug 2023 10:42 AM
Here is how to handle dependencies for RedHat:
sudo dnf groupinstall workstation sudo systemctl set-default graphical.target sudo yum install java-1.8.0-openjdk chromium firefox screen sudo reboot
21 Dec 2022 01:35 PM
Hello, the same thing happened to me with these two servers, can anyone tell us which versions of Linux are compatible?
Getting this:
Server 1
sudo /bin/bash installChromeDeps.sh
Sorry, Ubuntu 22.04.1 LTS is not supported.
Server 2
./installChromeDeps.sh
Sorry, AlmaLinux 8.7 (Stone Smilodon) is not supported.
Thanks ☹️
21 Dec 2022 01:47 PM
Hi.
I looked into that script and I can say that the Linux versions we currently support are:
Hope this helps 😅
09 Mar 2023 04:29 PM
Small update in supported versions. Ubuntu 16 is dropped as it does not support Chromium 90+. But we support ubuntu 22 now. So the updated list is:
Well, that is all from me 😉
21 Dec 2022 02:01 PM
I edited the script and added my version in.
I worked for me and I haven't seen any issues so far.
31 Mar 2023 04:01 PM
You can just install firefox and chromium manually and skip installChromeDeps.sh, I am running easyTravel on RedHat without any issues.
07 Mar 2023 01:13 PM
Hi team,
Should you disable monitoring on com.dynatrace.easytravel.weblauncher.jar? I don;t see com.dynatrace.easytravel.launcher.jar running in my test environment. Kr Ian
07 Mar 2023 01:27 PM - edited 07 Mar 2023 01:42 PM
Hi Ian,
Yes, please disable monitoring of webaluncher.jar process.
I updated information on page.
31 Mar 2023 03:55 PM - edited 31 Mar 2023 03:55 PM
Thank you. The original post still says
"You should disable monitoring of launcher (com.dynatrace.easytravel.launcher.jar easyTravel (x*)) and weblauncher (com.dynatrace.easytravel.weblauncher.jar easytravel-*-x*) processes".
I assume that now turning off deep monitoring for weblauncher.jar is sufficient, correct?
31 Mar 2023 04:16 PM
Correct. You just have to turn it off for the one you are using and you can find in Dynatrace.
Depending on the way you start easyTravel you will have one "*launcher" jar file monitored - if you don't disable it's monitoring you won't get any RUM data. There are a few ways/scripts to start easyTravel and they may use different "launchers" 🙂
08 Mar 2023 03:24 AM
Hello Dynatrace Team,
Currently, the link to download easyTravel is giving me an error of not being able to access the page to download. Not sure if it is something on my end or your end.
Any help is appreciated. Thank you.
Austin
08 Mar 2023 09:26 AM
Hi,
Well ... I just tried to download both the windows and linux installers and both downloads work correctly for me.
Can you try one more time? If that does not work, then there is an issue somewhere.
08 Mar 2023 12:10 PM
Well, when I go to the website now, it shows the list of installers. Before, it would show me this long url link that took me nowhere. Nothing changed on my end except turning off my PC for the night and then booting it back up this morning.
08 Mar 2023 02:45 PM
It seems someone else in my team fixed this and forgot to tell anyone about it... So yes, you are right. There was a problem and it was solved. Thanks for info!
04 Apr 2023
10:41 AM
- last edited on
04 Apr 2023
08:21 PM
by
andre_vdveen
While creating the session in the easyTravel application the Payment Backend (.NET) and B2B frontend (.NET) is not running. How can I solve it?
04 Apr 2023 11:58 AM
Hi.
Well, it is hard to say what is wrong. So let's go with the flow:
So ... this is all I can think of right now. Can you look through my suggestions and say if there is anything out of order that you have noticed? If there are no discoveries then please tell me:
Hope these will help us recreate the problem.
05 Apr 2023 12:08 PM
I have followed all your suggestions but the problem persists.
I think the problem is due to the fact that ports 9000 and 9010 are occupied by another application. As you can see from the window that appeared when I reinstalled the application.
Regarding the previous questions: I have windows 11, the version of easyTravel is 2.0.0.3551, ,I didn't change anything during the installation other than the checkbox for IIS and I ran the standard scenario, but the same problem occurs with the others.
Do you think it is the port? How can I solve it?
06 Apr 2023 04:37 PM - edited 06 Apr 2023 04:38 PM
Hi.
Well, if the ports are in use by a different application then that probably is the main cause of the problem. You can double check by going to you local addresses and checking if you see our easyTravel stuff or not, I mean trying to go to:
But I guess these won't work. So I have 3 solutions for you:
config.paymentBackendPort=9010
config.b2bFrontendPortRangeStart=9000
config.b2bFrontendPortRangeEnd=9009
Set a different port for PaymentService and Frontend. Just set the same value for range start and end of frontend. Apart from doing this, you need to go into the IID applications and rebind them. Restart the sites in IIS as well. After that restart easyTravel. It should work.
19 Jun 2023 09:11 PM
Hi,
Running a Linux install. When I try to run the "/bin/bash installChromeDeps.sh" cmd,
I get this error: "Sorry, Red Hat Enterprise Linux 8.7 (Ootpa) is not supported."
Also, When I run "./weblauncher.sh" I am not able to access the weblauncher via "ip.address:8094" with ip.address being the local 10.xx.xx.xx IP. Is there something I'm missing? Could the above error of from the "/bin/bash installChromeDeps.sh" cmd cause the weblauncher to not be accessible?
20 Jun 2023 09:22 AM
Hi.
So... The short answer is: we don't support Red Hat by default, so I don't know what is going on. Please use a supported distribution.
The long answer is:
So in the end, I would suggest to install easyTravel on a linux distribution that is supported. I will update the information above to make this more obvious.
But if you want to play with it on Red Hat, you can try to look into this directory "/home/YOUR_USER/.dynaTrace/easyTravel 2.0.0/easyTravel/log". There you should be able to find some clues to the errors/exceptions happening somewhere...
14 Aug 2023 04:18 PM
Is there a way to change the log directory for easyTravel? The default path seems to be C:\Users\<userId>\.dynaTrace\easyTravel 2.0.0\easyTravel\log on Windows.
16 Aug 2023 03:01 PM
You can use `com.dynatrace.easytravel.home.dir.correction`. Note it is relative to the c:\Users\<userId>\.dynaTrace\easyTravel 2.0.0 directory. For example adding
-Dcom.dynatrace.easytravel.home.dir.correction=..\..\..\..\tmp
will create directories log, config etc in c:\tmp
16 Aug 2023 03:10 PM
Great stuff, thanks @Rafal_Psciuk!
Where do I add that, easyTravelConfig.properties?
16 Aug 2023 05:00 PM
I tested it by modifying startup script C:\Program Files\dynaTrace\easyTravel (x64)\weblauncher\weblauncher.cmd:
%LAUNCHER_JAVA% -Djava.net.preferIPv4Stack=true ^
-Xmx768m ^
%COVERAGE_ARG% %LAUNCHER_ARGS% -Dcom.dynatrace.easytravel.install.dir.correction=.. -Dcom.dynatrace.easytravel.home.dir.correction=\..\..\..\..\tmp -Dorg.eclipse.rap.rwt.enableUITests=true ^ -Djava.security.auth.login.config=../resources/login-module.config ^
-jar ..\com.dynatrace.easytravel.weblauncher.jar %*
17 Aug 2023 02:23 PM
Strange, I tried the same but the logs keep getting written to the default path. I've even copied the text you provided to that file, restarted easyTravel, and even my laptop, but it still won't write to C:\tmp
Either way, thanks for the info...perhaps it will help someone else 😅😉
17 Aug 2023 07:09 PM
Are you running <et_install_dir>\weblauncher\weblauncher.cmd?
I checked again. Only some logs landed in c:\tmp directory.
To get backend and frontend logs modify this line in <et_install_dir>\resources\easyTravelConfig.properties:
config.javaopts=-Djava.net.preferIPv4Stack=true,-Dcom.dynatrace.easytravel.home.dir.correction=\\..\\..\\..\\..\\tmp
However I noticed that after those changes headless load generator (chrome) is crashing. 😞 So I don't recommend using it.
14 Nov 2023 04:08 PM
I have deployed the app on windows and I have set the user tag, but it only works for the session I manually do on the application, the synthetic generated visits are not being tagged, why? is there anything else I need to configure so I can get the generated visits tagged?
15 Nov 2023 12:48 PM
It should work in the same way. Note, that load is generated only to Angular frontend (port 9079).
16 Nov 2023 12:48 PM - edited 16 Nov 2023 12:49 PM
Hello @Rafal_Psciuk , can you please specify which option is that? I have tried with UEM-Standard and Production-black friday and I am not getting user tags.
Regards
16 Nov 2023 01:31 PM - edited 16 Nov 2023 03:14 PM
HI @Alejandro_hdez
It should work in UEM-Standard scenario.
I recommend trying these steps:
1. Setup User tag:
CSS selector: a.greeting
Cleanup rule: Regex: Hi,.(.*+)
2. Start easyTravel with UEM-Standard scenario
3. Verify that you have RUM data for generated visits
18 Nov 2023 04:25 PM
Than you @Rafal_Psciuk that selector did work, the one I took browsing the app by my self "#loginForm\:j_idt39" doesn't work.
Now, I'm not able to see session replay correctly, images are not being dispplayed on replay
I'am playing the sessions on Dynatrace on the same host where easytravel is running and I also tried clearing all browsing data and I tried with chrome and edge browsers
Best regards
20 Nov 2023 01:51 PM
Hi @Alejandro_hdez ,
AFAIK images will be not available if the application is accessed via http It will also not work when https certificate is self-signed.
Application needs to be accessed via https with valid certificate to have correct session replay.
06 Mar 2024 01:37 PM
Hi, in case someone needs, I created Ansible playbook to install easyTravel on RHEL8 or RHEL9. Likely works on other CentOS Stream variants as well. Available in GitHub. Pull requests welcome 😄
02 May 2024 02:17 PM
Hi Team,
Is that any option to change the URL of Easy travel application from the localhost to Some XYZ.com we are running two instance of easytravel application and we want to differentiate in the application rule.
09 May 2024 04:21 PM
You can change URLs that are used by load generator by adding following properties to the <et_install_dir>/resources/easyTravelConfig.properties file. NOTE: this file will be overwritten after easyTravel installation.
config.apacheFrontendPublicUrl=http://xyz:8079/
config.apacheB2BFrontendPublicUrl=http://xyz:8999/
config.angularFrontendPublicUrl=https://xyz:9079/
You can also put those properties in the <user_home>/.dynaTrace/easyTravel 2.0.0/easyTravel/config/easyTravelLocal.properties file.
04 Jun 2024 10:55 AM
Great Post!
I am on Dynatrace Saas and want to monitor EasyTravel via Dynatrace RUM.
I cannot deploy OneAgent, I want to use https://docs.dynatrace.com/docs/shortlink/agentless-rum
this agentless method to monitor it.
Let me know how can I make connection with my cluster and monitor it.
06 Jun 2024 07:46 AM
Hi @AdilSaleem
I never did it, but I would try to add agent in this file: easytravel-2.0.0-x64/angular/webapp/index.html
easytravel-2.0.0-x64 is default easyTravel installation directory; should be changed if you installed it in other place
07 Aug 2024 08:48 AM
The Documentation Was Nice Especially The Diagram Showing Architecture Of EasyTravel App.
Easy Setup For Both Windows and Linux.
07 Aug 2024 08:51 AM
Nice Example App and Architechture