A simple service that was created to handle the callback requests from telco APIs.
This simple service was created to handle the callbacks from APIs. These callbacks are bombarded to the service, stored in Redis and then updated in a blocking manner in the MySQL db.
"github.com/etowett/returns/common"
- contains all the common methods used in "github.com/etowett/returns/mylib
"github.com/garyburd/redigo/redis"
- Golang client for redis"github.com/go-sql-driver/mysql"
- Golang driver for MySQLgithub.com/joho/godotenv
- Golang loader for environment variables from .env
Most of the other dependencies are found in the import statements
main.go
is the main file that is run for execution i.e. go run main.go
common
folder contains the common methods re-used throughout the project.config
folder houses configuration for use if you want to run this application as a service with systemd
mylib
contains the structs
, interfaces
and functions
that handle the receiving of callbacks, parsing into required data structures and processing into the final step.Golang
and your $GO_PATH
(if not, please Google go get github.com/etowett/returns
. This will clone a copy of this repo into your /path/to/golang/projects/src/github.com/etowett
Rename the
env.sample
file into.env
and fill out the required variables
Redis should be running locally.
github.com/etowett/returns/common/utils.go
has the following function to initialize a Redis pool.
// RedisPool returns a redis pool
func RedisPool() *redis.Pool {
return &redis.Pool{
MaxIdle: 80,
MaxActive: 12000, // max number of connections
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", ":6379")
if err != nil {
panic(err.Error())
}
return c, err
},
}
}
The connection is pretty normal
There are 2 scenarios for connection in MySQL. We use a remote DB so our connection looks like this in
github.com/etowett/returns/main.go
:
common.DbCon, err = sql.Open("mysql", os.Getenv("DB_USER")+":"+os.Getenv("DB_PASS")+"@tcp("+os.Getenv("DB_HOST")+":3306)/"+os.Getenv("DB_NAME")+"?charset=utf8")
if err != nil {
panic(err.Error())
}
defer common.DbCon.Close()
If your DB is in your local server, it would be something like this:
common.DbCon, err = sql.Open("mysql", os.Getenv("DB_USER")+":"+os.Getenv("DB_PASS")+os.Getenv("DB_NAME")+"?charset=utf8")
if err != nil {
panic(err.Error())
}
defer common.DbCon.Close()
Just remove the
tcp
part.
LOG_DIR
variable in .env
tail -f /path/to/logs/returns.log
Ensure that this folder has the proper permissions to allow writing into it’s files
go build
to build the appgo install
. Check the /path/to/golang/projects/bin
folder and you should find a returns
executable../returns
on one terminal.client.py
i.e. ./client.py
You should see outputs of
Dlrs received
and logs on the tailed logs terminal.
inboxes
opt-out
Contributions are welcome. PRs will be accepted if they’ve followed atleast the minimum standards.
Reach out to: