Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package api
- import (
- "errors"
- consulapi "github.com/hashicorp/consul/api"
- "os"
- )
- // Interface to have all signature methods.
- type DataStoreRequester interface {
- InitializeDataStoreClient() error
- CheckDataStoreHealth() error
- RequestPUT(string, string) error
- RequestGET(string) (string, error)
- RequestGETS() ([]string, error)
- RequestDELETE(string) error
- }
- // Consul Struct
- type ConsulStruct struct {
- consulClient *consulapi.Client
- }
- func (c *ConsulStruct) InitializeDataStoreClient() error {
- if os.Getenv("DATASTORE_IP") == "" {
- return errors.New("DATASTORE_IP (consul/cassandra) environment variable not set.")
- }
- config := consulapi.DefaultConfig()
- config.Address = os.Getenv("DATASTORE_IP") + ":8500"
- client, err := consulapi.NewClient(config)
- if err != nil {
- return err
- }
- c.consulClient = client
- return nil
- }
- func (c *ConsulStruct) CheckDataStoreHealth() error {
- kv := c.consulClient.KV()
- _, _, err := kv.Get("test", nil)
- if err != nil {
- return errors.New("[ERROR] Cannot talk to Consul. Check if it is running/reachable.")
- }
- return nil
- }
- func (c *ConsulStruct) RequestPUT(key string, value string) error {
- kv := c.consulClient.KV()
- p := &consulapi.KVPair{Key: key, Value: []byte(value)}
- _, err := kv.Put(p, nil)
- if err != nil {
- return err
- }
- return nil
- }
- func (c *ConsulStruct) RequestGET(key string) (string, error) {
- kv := c.consulClient.KV()
- pair, _, err := kv.Get(key, nil)
- if pair == nil {
- return string("No value found for key."), err
- }
- return string(pair.Value), err
- }
- func (c *ConsulStruct) RequestGETS() ([]string, error) {
- kv := c.consulClient.KV()
- pairs, _, err := kv.List("", nil)
- if len(pairs) == 0 {
- return []string{"No keys found."}, err
- }
- var res []string
- for _, keypair := range pairs {
- res = append(res, keypair.Key)
- }
- return res, err
- }
- func (c *ConsulStruct) RequestDELETE(key string) error {
- kv := c.consulClient.KV()
- _, err := kv.Delete(key, nil)
- if err != nil {
- return err
- }
- return nil
- }
- // TODO(sshank): Place holder to add connection to MUSIC's Cassandra.
- type CassandraStruct struct {
- // Add necesary Cassandra client.
- }
- func (cs *CassandraStruct) InitializeDataStoreClient() error {
- return nil
- }
- func (cs *CassandraStruct) CheckDataStoreHealth() error {
- return nil
- }
- func (cs *CassandraStruct) RequestPUT(string, string) error {
- return nil
- }
- func (cs *CassandraStruct) RequestGET(string) error {
- return nil
- }
- func (cs *CassandraStruct) RequestGETS() ([]string, error) {
- return []string{""}, nil
- }
- func (cs *CassandraStruct) RequestDELETE(string) error {
- return nil
- }
Add Comment
Please, Sign In to add comment