/* Copyright 2018 Intel Corporation. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package db import ( "os" consulapi "github.com/hashicorp/consul/api" pkgerrors "github.com/pkg/errors" ) // ConsulDB is an implementation of the DatabaseConnection interface type ConsulDB struct { consulClient *consulapi.Client } // InitializeDatabase initialized the initial steps func (c *ConsulDB) InitializeDatabase() error { config := consulapi.DefaultConfig() config.Address = os.Getenv("DATABASE_IP") + ":8500" client, err := consulapi.NewClient(config) if err != nil { return err } c.consulClient = client return nil } // CheckDatabase checks if the database is running func (c *ConsulDB) CheckDatabase() error { kv := c.consulClient.KV() _, _, err := kv.Get("test", nil) if err != nil { return pkgerrors.New("[ERROR] Cannot talk to Datastore. Check if it is running/reachable.") } return nil } // CreateEntry is used to create a DB entry func (c *ConsulDB) CreateEntry(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 } // ReadEntry returns the internalID for a particular externalID is present in a namespace func (c *ConsulDB) ReadEntry(key string) (string, bool, error) { kv := c.consulClient.KV() pair, _, err := kv.Get(key, nil) if pair == nil { return string("No value found for ID: " + key), false, err } return string(pair.Value), true, err } // DeleteEntry is used to delete an ID func (c *ConsulDB) DeleteEntry(key string) error { kv := c.consulClient.KV() _, err := kv.Delete(key, nil) if err != nil { return err } return nil } // ReadAll is used to get all ExternalIDs in a namespace func (c *ConsulDB) ReadAll(prefix string) ([]string, error) { kv := c.consulClient.KV() pairs, _, err := kv.List(prefix, nil) if len(pairs) == 0 { return []string{""}, err } var res []string for _, keypair := range pairs { res = append(res, keypair.Key) } return res, err }