A Go-based service that provides geographical information for IP addresses using the Movable Ink GeoIP API.
- Go 1.21 or higher
- Clone the repository:
git clone https://github.com/movableink/sre-assignment-golang.git
cd sre-assignment-golang
- Install dependencies:
go mod download
The 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 with the Movable Ink GeoIP API. This is required for production use.PORT
: The port number for the service (default: 3000)
Build and start the service (don't forget to set your environment variables before starting):
go build -o server ./cmd/server
./server
The 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.8
Example successful response:
{
"ip": "8.8.8.8",
"location": "United States",
"postal_code": "",
"network_name": "AS15169 GOOGLE",
"domain": "Google",
"latitude": 37.751,
"longitude": -97.822
}
Example error response (500 Internal Server Error):
{
"error": "API request failed: <error details>"
}
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:
./server
- In another terminal, run the test script:
./test-ips.sh
The 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
cmd/server/
: Main application entry pointmain.go
: Server implementation
internal/
: Internal packagesconfig/
: Configuration managementgeoip/
: GeoIP service implementation
go.mod
: Go module definition and dependenciestest-ips.sh
: Testing script
This project is proprietary and confidential to Movable Ink.