本文整理汇总了Golang中github.com/tsuru/tsuru/db.Conn函数的典型用法代码示例。如果您正苦于以下问题:Golang Conn函数的具体用法?Golang Conn怎么用?Golang Conn使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Conn函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: spin
func (l *lockUpdater) spin() {
set := map[Target]struct{}{}
for {
select {
case added := <-l.addCh:
set[*added] = struct{}{}
case removed := <-l.removeCh:
delete(set, *removed)
case <-l.stopCh:
return
case <-time.After(lockUpdateInterval):
}
conn, err := db.Conn()
if err != nil {
log.Errorf("[events] [lock update] error getting db conn: %s", err)
continue
}
coll := conn.Events()
slice := make([]interface{}, len(set))
i := 0
for id := range set {
slice[i], _ = id.GetBSON()
i++
}
err = coll.Update(bson.M{"_id": bson.M{"$in": slice}}, bson.M{"$set": bson.M{"lockupdatetime": time.Now().UTC()}})
if err != nil && err != mgo.ErrNotFound {
log.Errorf("[events] [lock update] error updating: %s", err)
}
conn.Close()
}
}
开发者ID:tsuru,项目名称:tsuru,代码行数:31,代码来源:event.go
示例2: SetUpSuite
func (s *WriterSuite) SetUpSuite(c *gocheck.C) {
var err error
config.Set("database:url", "127.0.0.1:27017")
config.Set("database:name", "tsuru_api_writer_test")
s.conn, err = db.Conn()
c.Assert(err, gocheck.IsNil)
}
开发者ID:rochacon,项目名称:tsuru,代码行数:7,代码来源:writer_test.go
示例3: UnbindUnit
// UnbindUnit makes the unbind between the service instance and an unit.
func (si *ServiceInstance) UnbindUnit(app bind.App, unit bind.Unit) error {
endpoint, err := si.Service().getClient("production")
if err != nil {
return err
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
updateOp := bson.M{"$pull": bson.M{"units": unit.GetID()}}
err = conn.ServiceInstances().Update(bson.M{"name": si.Name, "service_name": si.ServiceName, "units": unit.GetID()}, updateOp)
if err != nil {
if err == mgo.ErrNotFound {
return ErrUnitNotBound
}
return err
}
err = endpoint.UnbindUnit(si, app, unit)
if err != nil {
rollbackErr := si.update(bson.M{"$addToSet": bson.M{"units": unit.GetID()}})
if rollbackErr != nil {
log.Errorf("[unbind unit] could not add bound unit back to db after failure: %s", rollbackErr)
}
return err
}
return nil
}
开发者ID:zhenruyan,项目名称:tsuru,代码行数:29,代码来源:service_instance.go
示例4: AcquireApplicationLockWait
// Same as AcquireApplicationLock but it keeps trying to acquire the lock
// until timeout is reached.
func AcquireApplicationLockWait(appName string, owner string, reason string, timeout time.Duration) (bool, error) {
timeoutChan := time.After(timeout)
conn, err := db.Conn()
if err != nil {
return false, err
}
defer conn.Close()
for {
appLock := AppLock{
Locked: true,
Reason: reason,
Owner: owner,
AcquireDate: time.Now().In(time.UTC),
}
err = conn.Apps().Update(bson.M{"name": appName, "lock.locked": bson.M{"$in": []interface{}{false, nil}}}, bson.M{"$set": bson.M{"lock": appLock}})
if err == nil {
return true, nil
}
if err != mgo.ErrNotFound {
return false, err
}
select {
case <-timeoutChan:
return false, nil
case <-time.After(300 * time.Millisecond):
}
}
}
开发者ID:Zapelini,项目名称:tsuru,代码行数:30,代码来源:app.go
示例5: setEnvsToApp
// setEnvsToApp adds environment variables to an app, serializing the resulting
// list of environment variables in all units of apps. This method can
// serialize them directly or using a queue.
//
// Besides the slice of environment variables, this method also takes two other
// parameters: publicOnly indicates whether only public variables can be
// overridden (if set to false, setEnvsToApp may override a private variable).
//
// shouldRestart defines if the server should be restarted after saving vars.
func (app *App) setEnvsToApp(envs []bind.EnvVar, publicOnly, shouldRestart bool, w io.Writer) error {
if len(envs) == 0 {
return nil
}
if w != nil {
fmt.Fprintf(w, "---- Setting %d new environment variables ----\n", len(envs))
}
for _, env := range envs {
set := true
if publicOnly {
e, err := app.getEnv(env.Name)
if err == nil && !e.Public && e.InstanceName != "" {
set = false
}
}
if set {
app.setEnv(env)
}
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
err = conn.Apps().Update(bson.M{"name": app.Name}, bson.M{"$set": bson.M{"env": app.Env}})
if err != nil {
return err
}
if !shouldRestart {
return nil
}
return Provisioner.Restart(app, "", w)
}
开发者ID:Zapelini,项目名称:tsuru,代码行数:42,代码来源:app.go
示例6: AddCName
// AddCName adds a CName to app. It updates the attribute,
// calls the SetCName function on the provisioner and saves
// the app in the database, returning an error when it cannot save the change
// in the database or add the CName on the provisioner.
func (app *App) AddCName(cnames ...string) error {
for _, cname := range cnames {
if cname != "" && !cnameRegexp.MatchString(cname) {
return stderr.New("Invalid cname")
}
if cnameExists(cname) {
return stderr.New("cname already exists!")
}
if s, ok := Provisioner.(provision.CNameManager); ok {
if err := s.SetCName(app, cname); err != nil {
return err
}
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
app.CName = append(app.CName, cname)
err = conn.Apps().Update(
bson.M{"name": app.Name},
bson.M{"$push": bson.M{"cname": cname}},
)
if err != nil {
return err
}
}
return nil
}
开发者ID:Zapelini,项目名称:tsuru,代码行数:33,代码来源:app.go
示例7: List
// List returns the list of apps that the given user has access to.
//
// If the user does not have access to any app, this function returns an empty
// list and a nil error.
//
// The list can be filtered through the filter parameter.
func List(u *auth.User, filter *Filter) ([]App, error) {
var apps []App
conn, err := db.Conn()
if err != nil {
return nil, err
}
defer conn.Close()
query := filter.Query()
if u == nil || u.IsAdmin() {
if err = conn.Apps().Find(query).All(&apps); err != nil {
return []App{}, err
}
return apps, nil
}
ts, err := u.Teams()
if err != nil {
return []App{}, err
}
teams := auth.GetTeamsNames(ts)
query["teams"] = bson.M{"$in": teams}
if err := conn.Apps().Find(query).All(&apps); err != nil {
return []App{}, err
}
return apps, nil
}
开发者ID:Zapelini,项目名称:tsuru,代码行数:31,代码来源:app.go
示例8: ReserveApp
// ReserveApp reserves an app for the user, reserving it in the database. It's
// used to reserve the app in the user quota, returning an error when there
// isn't any space available.
func ReserveApp(user *User) error {
user, err := checkUser(user.Email)
if err != nil {
return err
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
err = conn.Users().Update(
bson.M{"email": user.Email, "quota.inuse": user.InUse},
bson.M{"$inc": bson.M{"quota.inuse": 1}},
)
for err == mgo.ErrNotFound {
user, err = checkUser(user.Email)
if err != nil {
return err
}
err = conn.Users().Update(
bson.M{"email": user.Email, "quota.inuse": user.InUse},
bson.M{"$inc": bson.M{"quota.inuse": 1}},
)
}
return err
}
开发者ID:ningjh,项目名称:tsuru,代码行数:29,代码来源:quota.go
示例9: ReleaseApp
// ReleaseApp releases an app from the user list, releasing the quota spot for
// another app.
func ReleaseApp(user *User) error {
errCantRelease := errors.New("Cannot release unreserved app")
user, err := GetUserByEmail(user.Email)
if err != nil {
return err
}
if user.Quota.InUse == 0 {
return errCantRelease
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
err = conn.Users().Update(
bson.M{"email": user.Email, "quota.inuse": user.InUse},
bson.M{"$inc": bson.M{"quota.inuse": -1}},
)
for err == mgo.ErrNotFound {
user, err = GetUserByEmail(user.Email)
if err != nil {
return err
}
if user.Quota.InUse == 0 {
return errCantRelease
}
err = conn.Users().Update(
bson.M{"email": user.Email, "quota.inuse": user.InUse},
bson.M{"$inc": bson.M{"quota.inuse": -1}},
)
}
return err
}
开发者ID:ningjh,项目名称:tsuru,代码行数:35,代码来源:quota.go
示例10: serviceDelete
func serviceDelete(w http.ResponseWriter, r *http.Request, t auth.Token) error {
u, err := t.User()
if err != nil {
return err
}
rec.Log(u.Email, "delete-service", r.URL.Query().Get(":name"))
s, err := getServiceByOwner(r.URL.Query().Get(":name"), u)
if err != nil {
return err
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
n, err := conn.ServiceInstances().Find(bson.M{"service_name": s.Name}).Count()
if err != nil {
return err
}
if n > 0 {
msg := "This service cannot be removed because it has instances.\nPlease remove these instances before removing the service."
return &errors.HTTP{Code: http.StatusForbidden, Message: msg}
}
err = s.Delete()
if err != nil {
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
开发者ID:nicolas2bonfils,项目名称:tsuru,代码行数:30,代码来源:service_provision.go
示例11: revokeServiceAccess
func revokeServiceAccess(w http.ResponseWriter, r *http.Request, t auth.Token) error {
u, err := t.User()
if err != nil {
return err
}
serviceName := r.URL.Query().Get(":service")
teamName := r.URL.Query().Get(":team")
rec.Log(u.Email, "revoke-service-access", "service="+serviceName, "team="+teamName)
service, team, err := getServiceAndTeam(serviceName, teamName, u)
if err != nil {
return err
}
if len(service.Teams) < 2 {
msg := "You can not revoke the access from this team, because it is the unique team with access to this service, and a service can not be orphaned"
return &errors.HTTP{Code: http.StatusForbidden, Message: msg}
}
err = service.RevokeAccess(team)
if err != nil {
return &errors.HTTP{Code: http.StatusNotFound, Message: err.Error()}
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
return conn.Services().Update(bson.M{"_id": service.Name}, service)
}
开发者ID:nicolas2bonfils,项目名称:tsuru,代码行数:27,代码来源:service_provision.go
示例12: TestContainerRemoveStopsContainer
func (s *S) TestContainerRemoveStopsContainer(c *check.C) {
conn, err := db.Conn()
c.Assert(err, check.IsNil)
defer conn.Close()
a := app.App{Name: "test-app"}
err = conn.Apps().Insert(a)
c.Assert(err, check.IsNil)
container, err := s.newContainer(newContainerOpts{AppName: a.Name}, nil)
c.Assert(err, check.IsNil)
defer s.removeTestContainer(container)
err = container.Start(&StartArgs{Provisioner: s.p, App: &a})
c.Assert(err, check.IsNil)
err = container.Remove(s.p)
c.Assert(err, check.IsNil)
coll := s.p.Collection()
defer coll.Close()
err = coll.Find(bson.M{"id": container.ID}).One(&container)
c.Assert(err, check.NotNil)
c.Assert(err.Error(), check.Equals, "not found")
client, _ := docker.NewClient(s.server.URL())
_, err = client.InspectContainer(container.ID)
c.Assert(err, check.NotNil)
_, ok := err.(*docker.NoSuchContainer)
c.Assert(ok, check.Equals, true)
}
开发者ID:kgrvamsi,项目名称:tsuru,代码行数:25,代码来源:container_test.go
示例13: AddRole
func (u *User) AddRole(roleName string, contextValue string) error {
_, err := permission.FindRole(roleName)
if err != nil {
return err
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
err = conn.Users().Update(bson.M{"email": u.Email}, bson.M{
"$addToSet": bson.M{
// Order matters in $addToSet, that's why bson.D is used instead
// of bson.M.
"roles": bson.D([]bson.DocElem{
{Name: "name", Value: roleName},
{Name: "contextvalue", Value: contextValue},
}),
},
})
if err != nil {
return err
}
return u.Reload()
}
开发者ID:pedrosnk,项目名称:tsuru,代码行数:25,代码来源:user.go
示例14: Create
func (u *User) Create() error {
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
if u.Quota.Limit == 0 {
u.Quota = quota.Unlimited
var limit int
if limit, err = config.GetInt("quota:apps-per-user"); err == nil && limit > -1 {
u.Quota.Limit = limit
}
}
err = conn.Users().Insert(u)
if err != nil {
return err
}
err = u.createOnRepositoryManager()
if err != nil {
u.Delete()
return err
}
err = u.AddRolesForEvent(permission.RoleEventUserCreate, "")
if err != nil {
log.Errorf("unable to add default roles during user creation for %q: %s", u.Email, err)
}
return nil
}
开发者ID:pedrosnk,项目名称:tsuru,代码行数:28,代码来源:user.go
示例15: collection
func collection() (*storage.Collection, error) {
conn, err := db.Conn()
if err != nil {
return nil, err
}
return conn.Collection("bsconfig"), nil
}
开发者ID:reoring,项目名称:tsuru,代码行数:7,代码来源:bs.go
示例16: TestPlatformUpdateShouldSetUpdatePlatformFlagOnApps
func (s *PlatformSuite) TestPlatformUpdateShouldSetUpdatePlatformFlagOnApps(c *gocheck.C) {
provisioner := testing.ExtensibleFakeProvisioner{
FakeProvisioner: testing.NewFakeProvisioner(),
}
Provisioner = &provisioner
defer func() {
Provisioner = s.provisioner
}()
conn, err := db.Conn()
c.Assert(err, gocheck.IsNil)
defer conn.Close()
name := "test_platform_update"
args := make(map[string]string)
args["dockerfile"] = "http://localhost/Dockerfile"
err = PlatformAdd(name, nil, nil)
c.Assert(err, gocheck.IsNil)
defer conn.Platforms().Remove(bson.M{"_id": name})
appName := "test_app"
app := App{
Name: appName,
Platform: name,
}
err = conn.Apps().Insert(app)
c.Assert(err, gocheck.IsNil)
defer conn.Apps().Remove(bson.M{"_id": appName})
err = PlatformUpdate(name, args, nil)
c.Assert(err, gocheck.IsNil)
a, err := GetByName(appName)
c.Assert(err, gocheck.IsNil)
c.Assert(a.UpdatePlatform, gocheck.Equals, true)
}
开发者ID:ningjh,项目名称:tsuru,代码行数:31,代码来源:platform_test.go
示例17: unsetEnvsToApp
func (app *App) unsetEnvsToApp(variableNames []string, publicOnly, shouldRestart bool, w io.Writer) error {
if len(variableNames) == 0 {
return nil
}
if w != nil {
fmt.Fprintf(w, "---- Unsetting %d environment variables ----\n", len(variableNames))
}
for _, name := range variableNames {
var unset bool
e, err := app.getEnv(name)
if !publicOnly || (err == nil && e.Public) {
unset = true
}
if unset {
delete(app.Env, name)
}
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
err = conn.Apps().Update(bson.M{"name": app.Name}, bson.M{"$set": bson.M{"env": app.Env}})
if err != nil {
return err
}
if !shouldRestart {
return nil
}
return Provisioner.Restart(app, "", w)
}
开发者ID:Zapelini,项目名称:tsuru,代码行数:31,代码来源:app.go
示例18: saveDeployData
func saveDeployData(opts *DeployOptions, imageId, log string, duration time.Duration, deployError error) error {
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
deploy := DeployData{
App: opts.App.Name,
Timestamp: time.Now(),
Duration: duration,
Commit: opts.Commit,
Image: imageId,
Log: log,
User: opts.User,
}
if opts.Commit != "" {
deploy.Origin = "git"
} else if opts.Image != "" {
deploy.Origin = "rollback"
} else {
deploy.Origin = "app-deploy"
}
if deployError != nil {
deploy.Error = deployError.Error()
}
return conn.Deploys().Insert(deploy)
}
开发者ID:edulemasson,项目名称:tsuru,代码行数:27,代码来源:deploy.go
示例19: RemoveCName
func (app *App) RemoveCName(cnames ...string) error {
for _, cname := range cnames {
count := 0
for _, appCname := range app.CName {
if cname == appCname {
count += 1
}
}
if count == 0 {
return stderr.New("cname not exists!")
}
if s, ok := Provisioner.(provision.CNameManager); ok {
if err := s.UnsetCName(app, cname); err != nil {
return err
}
}
conn, err := db.Conn()
if err != nil {
return err
}
defer conn.Close()
err = conn.Apps().Update(
bson.M{"name": app.Name},
bson.M{"$pull": bson.M{"cname": cname}},
)
if err != nil {
return err
}
}
return nil
}
开发者ID:Zapelini,项目名称:tsuru,代码行数:31,代码来源:app.go
示例20: Collection
func (p *FakeDockerProvisioner) Collection() *storage.Collection {
conn, err := db.Conn()
if err != nil {
panic(err)
}
return conn.Collection("fake_docker_provisioner")
}
开发者ID:tsuru,项目名称:tsuru,代码行数:7,代码来源:provisioner.go
注:本文中的github.com/tsuru/tsuru/db.Conn函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论