Thursday, August 16, 2018

Running Gravitee API Gateway

Gravitee running

Configuring and Starting Gravitee API Managemant Gateway

First install and start the dependencies:

1) Mongo
$ mongod

2) Elastic search
$ cd elasticsearch-6.3.2/bin/
$ ./elasticsearch

Starting Gravitee API Managemant Gateway
Download and extract the project zips of graviteeio.

First, Start the API Gateway
$ cd graviteeio-full-1.18.1/graviteeio-gateway-1.18.1/bin
$ ./graviteeio

Now accessing http://localhost:8082/ should give you the message:
No context-path matches the request URI.

Configure graviteeio-gateway-1.18.1/config/gravitee.yml
By default, the gravitee data is stored in the mongo database gravitee.
You can change these default configurations.

Then, start the Managemant API.
$ cd graviteeio-full-1.18.1/graviteeio-management-api-1.18.1/bin
$ ./gravitee

Now you can access http://localhost:8083/management/apis/ which should give an empty response [ ].

By now, the gravitee database in MongoDB should have the below collections:
events, ratelimit - for the API gateway
audits, metadata, roles, views - for the Management API

More configuration details such as using an LDAP provider and configuring OAuth2 Authentication can be found from the official documentation.

Next, start the Portal.
$ cd graviteeio-full-1.18.1/graviteeio-management-ui-1.18.1

You have the choice of starting the Portal with Python3 or Node.

Let's go with Python3.
$ python3 -m http.server
Serving HTTP on port 8000 ( ...

Now you can access the portal from http://localhost:8000/#!/

You may further configure the portal to fit your requirements.

Configuring and Starting Gravitee Access Managemant

First, start the gateway
$ cd gravitee-am-gateway-standalone-2.0.4/bin/
$ ./gravitee

Now you should get an empty response to http://localhost:8092/
Now, run the AM Managemant API.

$ cd gravitee-am-management-api-standalone-2.0.4/bin/
$ ./gravitee

Now, accessing http://localhost:8093/management/domains/ should give you an empty response.

Finally, let's start the last component of our ecosystem.
The AM Managemant UI, which is a client-side Angular application.

The directory of the Managemant UI is at,
$ cd gravitee-am-webui-2.0.4/

You will need an HTTP server such as Apache or Nginx. Then you may configure the Management UI following the documentation.

Wednesday, August 1, 2018

The Atlanta Algorithm

[Aug 1st] As with many other cities in the US, Atlanta has a public transportation network (known as MARTA), which is a joke. In fact, the metro is ok. But my issue is with the buses. Unfortunately, most of Atlanta is not also walkable. Lack of proper sidewalks in the residential neighborhoods. Life in Europe has taught us that it is not necessary to drive, and it is ok to use the public transport. :D Given this state, we choose to live close to my university. 20 minutes by walk.

There is also a bus stop close to both my apartment and my lab. A bus (#6) passes by every 30 minutes, connecting my home to my lab in the university. I usually walk to my lab, and return, by foot. But since I have a free monthly public transportation pass from the university, I decided to use it.

Before leaving home, I check the app to confirm the arrival time of the bus. However, the timing is not accurate. The bus usually comes with a time interval [-3:5], that means 3 minutes earlier to 5 minutes later. But now for the third time in a row, the bus came 10 minutes late. To ensure I do not miss the bus, I always arrive 3 - 4 minutes earlier. Therefore, I leave home 7 minutes earlier than the bus' arrival time at the bus stop (since I need to walk a bit to reach the bus stop).

Let's look at one specific example: Today, I left home at 7:43 to catch the bus that would arrive at 7:50. I reached the bus stop at 7:46. The bus eventually came at 8:10. Then, the bus reached the destination in a few minutes, and I entered the lab at 8:18. If I walked, I would have reached the lab at 8:03. The bus cost me 15 minutes extra.

In a regular/successful day, this would go like this. I leave home at 7:43. The bus comes at 7:54, and I arrive at the lab at 8:01. If the bus reaches my bus halt earlier than usual, the bus driver stops in the bus stop before the Emory village for a few minutes to make sure the bus does not proceed to the next stop too early?!?!?!. So it never happened that I arrived before 8:01 when I use the bus. So I can conclude that using the bus costs me 18 minutes in the best case and 35 minutes in the worst case. On the other hand, if I walk, I take 20 minutes, a constant time, regardless of rain or shine.

[Update: Aug 2nd]
So I found that "MARTA On the Go" application actually offers a real-time schedule of the bus, unlike Google maps which shows a static schedule. Today I checked the bus time just before leaving home. The bus was on its way. It said "6 minutes late" with the current location. MARTA On the Go does not show the estimated arrival time at each stop with this dynamic information. Rather, it shows the current location of the bus (that means, you should have an idea of the road map, or you need to use it in conjunction with another application such as Google maps) and the current delay. With the 6 minutes delay, the bus can reach my stop in 4 (if the driver manages to catch up) - 8 (if the bus further gets delayed) minutes late, I estimated. With this estimate, I left home at 7:48 and arrived at the stop at 7:50. The bus eventually arrived at 8:02. So it actually got delayed 12 minutes (apparently it got delayed 6 more minutes since I checked). I reached the destination bus stop at 8:12 (13 minutes later than the original time). I arrived at the lab at 8:13. 25 minutes (i.e., 5 minutes later than my walking time). I noticed from the app that the next bus got delayed 8 minutes to reach my starting bus stop. While this app does not solve the inefficiency of the public transport, it certainly mitigates the uncertainty and help plan the timing better.

Every city's public transportation system teaches me some new life lesson. I learned something in Jeju. Now in Atlanta. I like these life lessons - I do not underestimate them. Trust yourself, instead of trusting an external element!