gohashserver

command module
v0.0.0-...-adde280 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 2, 2021 License: GPL-3.0 Imports: 15 Imported by: 0

README

gohashserver

Go lang server for serving hash values

Parameters

port              # http port, defaults to 8080
hash-delay        # delay for saving hash value, defaults to 5 seconds
shutdown-timeout  # timeout for shutdown, defaults to 1 minute

Example command

go run hashserver.go --port 9000

API

POST /hash takes data "password=xyz" and returns hash id
GET /hash/i returns the hash value for hash id
    Note: POST takes 5 seconds to save value, so will return missing id until value is available
GET /stats returns number of POST /hash requests and average time in microseconds
GET /shutdown tells server to shutdown
    Note: Shutdown waits for requests to finish processing
    Note: Interrupt signals also have the same effect as call to /shutdown

Design

Graceful Shutdown
Graceful shutdown is achieved by using sync.WaitGroup objects
After the shutdown request is received, waits for requests to complete
All requests increment the wait count and decrement when done
Delayed Computation
Asynchronous hash computation is achieved by creating a separate thread
To start the computation after the request completes, defer is used
By using defer (to delay starting the computation) and go (separate thread)
we are able to complete the http request and compute the hash in the background
Statistics
The variables for the counter and timer stats are atomic
This ensures that they are fetched and incremented atomically

Sample requests

curl -X POST --data "password=angryMonkey" http://localhost:9000/hash
==> 1
curl -X POST --data "password=secondMonkey" http://localhost:9000/hash
==> 2
curl -X GET http://localhost:9000/stats
==> {"total": 2, "average": 32}
curl -X GET http://localhost:9000/hash/1
==> ZEHhWB65gUlzdVwtDQArEyx+KVLzp/aTaRaPlBzYRIFj6vjFdqEb0Q5B8zVKCZ0vKbZPZklJz0Fd7su2A+gf7Q==
curl -X GET http://localhost:9000/hash/2
==> fwaxl5tGU2y3NgCH3fbT0uv/jTre6aZh4KQBGoA8cnJe89jGZQO0kiSNqJl6aho+ozFzkPmgz4gM2zx/Iy9MGg==
curl -X GET http://localhost:9000/shutdown
==> Shutting down HTTP server

Testing

go test hashserver.go hashserver_test.go

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL