A TypeScript-based service that provides geographical information for IP addresses using the Movable Ink GeoIP API.
- Node.js (v14 or higher)
- npm (v6 or higher)
- Clone the repository:
git clone https://github.com/movableink/sre-assignment-typescript.git
cd sre-assignment-typescript- Install dependencies:
npm installThe service requires the following environment variables:
API_URL: The base URL for the Movable Ink GeoIP API (default: http://localhost:8000). A production URL will be provided by Movable Ink.API_TOKEN: Your API token for authentication (optional) with the Movable Ink GeoIP API. A production token will be provided by Movable Ink.PORT: The port number for the service (default: 3000)
Start the service (don't forget to set your environment variables before starting):
npm startThe service will be available at http://localhost:3000.
Returns geographical information for the specified IP address.
Example request:
curl http://localhost:3000/lookup/8.8.8.8Example response:
{
"ip": "8.8.8.8",
"location": "United States",
"postal_code": "",
"network_name": "AS15169 GOOGLE",
"domain": "Google",
"latitude": 37.751,
"longitude": -97.822
}The repository includes a bash script (test-ips.sh) that tests the service with a list of IP addresses from test_ips.txt. If test_ips.txt is not available you can create your own file and enter an ip address per line for testing. For the assignment the test_ips.txt file will be provided by Movable Ink.
To run the tests:
- Make sure the service is running in one terminal:
npm start- In another terminal, run the test script:
./test-ips.shThe script will:
- Process each IP address in
test_ips.txt - Show progress every 100 requests
- Display a summary including:
- Total number of requests
- Total time taken
- Average requests per second
- Distribution of HTTP status codes
To compile the TypeScript code:
npm run buildThis will create a dist directory with the compiled JavaScript files.
The project uses TypeScript for type safety and better developer experience. Key files:
src/server.ts: Express server setup and route definitionssrc/geoip.ts: GeoIP service implementationsrc/config.ts: Configuration managementsrc/types.ts: TypeScript type definitions
This project is proprietary and confidential to Movable Ink.