github.com/orofarne/hammy@v0.0.0-20130409105742-374fadfd6ecb/src/hammy/couchbase_triggers.go (about)

     1  package hammy
     2  
     3  import (
     4  	"fmt"
     5  	"encoding/json"
     6  	"github.com/couchbaselabs/go-couchbase"
     7  	"github.com/dustin/gomemcached"
     8  )
     9  
    10  type CouchbaseTriggersGetter struct {
    11  	Client *couchbase.Client
    12  	Pool *couchbase.Pool
    13  	Bucket *couchbase.Bucket
    14  }
    15  
    16  func NewCouchbaseTriggersGetter(cfg Config) (*CouchbaseTriggersGetter, error) {
    17  	tg := new(CouchbaseTriggersGetter)
    18  
    19  	c, err := couchbase.Connect(cfg.CouchbaseTriggers.ConnectTo)
    20  	if err != nil {
    21  		return nil, err
    22  	}
    23  	tg.Client = &c
    24  
    25  	p, err := tg.Client.GetPool(cfg.CouchbaseTriggers.Pool)
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  	tg.Pool = &p
    30  
    31  	b, err := tg.Pool.GetBucket(cfg.CouchbaseTriggers.Bucket)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  	tg.Bucket = b
    36  
    37  	return tg, nil
    38  }
    39  
    40  func (tg *CouchbaseTriggersGetter) MGet(keys []string) (triggers map[string]string, err error) {
    41  	ans := tg.Bucket.GetBulk(keys)
    42  
    43  	triggers = make(map[string]string)
    44  	for k, r := range ans {
    45  		switch r.Status {
    46  			case gomemcached.SUCCESS:
    47  				var body string
    48  				err = json.Unmarshal(r.Body, &body)
    49  				if err != nil {
    50  					return
    51  				}
    52  				triggers[k] = body
    53  			case gomemcached.KEY_ENOENT:
    54  				// nil
    55  			default:
    56  				err = fmt.Errorf("%s", r.Error())
    57  				return
    58  		}
    59  	}
    60  
    61  	return
    62  }