This is an automated email from the ASF dual-hosted git repository.

littlecui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new 6e3e608  [feat] add eventbase (#1175)
6e3e608 is described below

commit 6e3e60889dc8b541f4f91b70934df834d5b7ab93
Author: robotljw <[email protected]>
AuthorDate: Wed Dec 8 21:41:02 2021 +0800

    [feat] add eventbase (#1175)
    
    1.add datasource in eventbase
---
 eventbase/datasource/datasource.go   | 24 +++++++++++
 eventbase/datasource/manager.go      | 84 ++++++++++++++++++++++++++++++++++++
 eventbase/datasource/options.go      | 68 +++++++++++++++++++++++++++++
 eventbase/datasource/task.go         | 33 ++++++++++++++
 eventbase/datasource/tombstone.go    | 35 +++++++++++++++
 eventbase/go.mod                     |  8 ++++
 eventbase/go.sum                     | 18 ++++++++
 eventbase/model/tombstone_request.go | 26 +++++++++++
 go.mod                               |  2 +-
 go.sum                               |  4 +-
 10 files changed, 299 insertions(+), 3 deletions(-)

diff --git a/eventbase/datasource/datasource.go 
b/eventbase/datasource/datasource.go
new file mode 100644
index 0000000..3f90469
--- /dev/null
+++ b/eventbase/datasource/datasource.go
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 datasource
+
+// DataSource is the DAO layer
+type DataSource interface {
+       TaskDao() TaskDao
+       TombstoneDao() TombstoneDao
+}
diff --git a/eventbase/datasource/manager.go b/eventbase/datasource/manager.go
new file mode 100644
index 0000000..215d322
--- /dev/null
+++ b/eventbase/datasource/manager.go
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 datasource
+
+import (
+       "fmt"
+       "time"
+
+       "github.com/go-chassis/cari/db"
+       "github.com/go-chassis/openlog"
+)
+
+const (
+       DefaultTimeout = 60 * time.Second
+       DefaultDBKind  = "embedded_etcd"
+)
+
+var (
+       dataSourceInst DataSource
+       plugins        = make(map[string]dataSourceEngine)
+)
+
+type dataSourceEngine func(c *db.Config) (DataSource, error)
+
+func GetDataSource() DataSource {
+       return dataSourceInst
+}
+
+func RegisterPlugin(name string, engineFunc dataSourceEngine) {
+       plugins[name] = engineFunc
+}
+
+func Init(c db.Config) error {
+       var err error
+       if c.Kind == "" {
+               c.Kind = DefaultDBKind
+       }
+       f, ok := plugins[c.Kind]
+       if !ok {
+               return fmt.Errorf("do not support %s", c.Kind)
+       }
+       if c.Timeout == 0 {
+               c.Timeout = DefaultTimeout
+       }
+       dbc := &db.Config{
+               URI:         c.URI,
+               PoolSize:    c.PoolSize,
+               SSLEnabled:  c.SSLEnabled,
+               RootCA:      c.RootCA,
+               CertFile:    c.CertFile,
+               CertPwdFile: c.CertPwdFile,
+               KeyFile:     c.KeyFile,
+               Timeout:     c.Timeout,
+       }
+
+       if dataSourceInst, err = f(dbc); err != nil {
+               return err
+       }
+       openlog.Info(fmt.Sprintf("use %s as storage", c.Kind))
+       return nil
+}
+
+func GetTaskDao() TaskDao {
+       return dataSourceInst.TaskDao()
+}
+
+func GetTombstoneDao() TombstoneDao {
+       return dataSourceInst.TombstoneDao()
+}
diff --git a/eventbase/datasource/options.go b/eventbase/datasource/options.go
new file mode 100644
index 0000000..236b166
--- /dev/null
+++ b/eventbase/datasource/options.go
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 datasource
+
+type TaskFindOptions struct {
+       Action   string
+       Status   string
+       DataType string
+}
+
+type TombstoneFindOptions struct {
+       ResourceType    string
+       BeforeTimestamp int64
+}
+
+type TaskFindOption func(options *TaskFindOptions)
+
+type TombstoneFindOption func(options *TombstoneFindOptions)
+
+// WithAction find task with action
+func WithAction(action string) TaskFindOption {
+       return func(options *TaskFindOptions) {
+               options.Action = action
+       }
+}
+
+// WithStatus find task with status
+func WithStatus(status string) TaskFindOption {
+       return func(options *TaskFindOptions) {
+               options.Status = status
+       }
+}
+
+// WithDataType find task with dataType
+func WithDataType(dataType string) TaskFindOption {
+       return func(options *TaskFindOptions) {
+               options.DataType = dataType
+       }
+}
+
+// WithResourceType find tombstone with resource type
+func WithResourceType(resourceType string) TombstoneFindOption {
+       return func(options *TombstoneFindOptions) {
+               options.ResourceType = resourceType
+       }
+}
+
+// WithBeforeTimestamp find tombstone with beforeTimestamp
+func WithBeforeTimestamp(timestamp int64) TombstoneFindOption {
+       return func(options *TombstoneFindOptions) {
+               options.BeforeTimestamp = timestamp
+       }
+}
diff --git a/eventbase/datasource/task.go b/eventbase/datasource/task.go
new file mode 100644
index 0000000..f299109
--- /dev/null
+++ b/eventbase/datasource/task.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 datasource
+
+import (
+       "context"
+
+       "github.com/go-chassis/cari/sync"
+)
+
+// TaskDao provide api of Task entity
+type TaskDao interface {
+       // Create func is used for ut
+       Create(ctx context.Context, task *sync.Task) (*sync.Task, error)
+       Update(ctx context.Context, task *sync.Task) error
+       Delete(ctx context.Context, tasks ...*sync.Task) error
+       List(ctx context.Context, domain string, project string, options 
...TaskFindOption) ([]*sync.Task, error)
+}
diff --git a/eventbase/datasource/tombstone.go 
b/eventbase/datasource/tombstone.go
new file mode 100644
index 0000000..f57effb
--- /dev/null
+++ b/eventbase/datasource/tombstone.go
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 datasource
+
+import (
+       "context"
+
+       "github.com/go-chassis/cari/sync"
+
+       "servicecomb-service-center/eventbase/model"
+)
+
+// TombstoneDao provide api of Tombstone entity
+type TombstoneDao interface {
+       Get(ctx context.Context, req *model.GetTombstoneRequest) 
(*sync.Tombstone, error)
+       // Create func is used for ut
+       Create(ctx context.Context, tombstone *sync.Tombstone) 
(*sync.Tombstone, error)
+       Delete(ctx context.Context, tombstone ...*sync.Tombstone) error
+       List(ctx context.Context, domain string, project string, options 
...TombstoneFindOptions) ([]*sync.Tombstone, error)
+}
diff --git a/eventbase/go.mod b/eventbase/go.mod
new file mode 100644
index 0000000..8c0e230
--- /dev/null
+++ b/eventbase/go.mod
@@ -0,0 +1,8 @@
+module servicecomb-service-center/eventbase
+
+require (
+       github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e
+       github.com/go-chassis/openlog v1.1.3
+)
+
+go 1.17
diff --git a/eventbase/go.sum b/eventbase/go.sum
new file mode 100644
index 0000000..cf859ad
--- /dev/null
+++ b/eventbase/go.sum
@@ -0,0 +1,18 @@
+github.com/davecgh/go-spew v1.1.0/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/deckarep/golang-set v1.7.1/go.mod 
h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ=
+github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e 
h1:6z88U255Sm/Ds10uT7ZqYomKLanDzTWxseDBITONFhk=
+github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e/go.mod 
h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
+github.com/go-chassis/openlog v1.1.3 
h1:XqIOvZ8YPJ9o9lLtLBskQNNWolK5kC6a4Sv7r4s9sZ4=
+github.com/go-chassis/openlog v1.1.3/go.mod 
h1:+eYCADVxWyJkwsFMUBrMxyQlNqW+UUsCxvR2LrYZUaA=
+github.com/gogo/protobuf v1.3.1/go.mod 
h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/karlseguin/ccache/v2 v2.0.8/go.mod 
h1:2BDThcfQMf/c0jnZowt16eW405XIqZPavt+HoYEtcxQ=
+github.com/karlseguin/expect v1.0.2-0.20190806010014-778a5f0c6003/go.mod 
h1:zNBxMY8P21owkeogJELCLeHIt+voOSduHYTFUbwRAV8=
+github.com/kisielk/errcheck v1.2.0/go.mod 
h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v1.0.0/go.mod 
h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.6.1/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod 
h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/eventbase/model/tombstone_request.go 
b/eventbase/model/tombstone_request.go
new file mode 100644
index 0000000..1e77f62
--- /dev/null
+++ b/eventbase/model/tombstone_request.go
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 model
+
+// GetTombstoneRequest contains tombstone get request params
+type GetTombstoneRequest struct {
+       Project      string `json:"project,omitempty" yaml:"project,omitempty"`
+       Domain       string `json:"domain,omitempty" yaml:"domain,omitempty"`
+       ResourceType string `json:"resource_type,omitempty" 
yaml:"resource_type,omitempty"`
+       ResourceID   string `json:"resource_id,omitempty" 
yaml:"resource_id,omitempty"`
+}
diff --git a/go.mod b/go.mod
index 28cb4f7..94afd9b 100644
--- a/go.mod
+++ b/go.mod
@@ -13,7 +13,7 @@ require (
        github.com/deckarep/golang-set v1.7.1
        github.com/elithrar/simple-scrypt v1.3.0
        github.com/ghodss/yaml v1.0.0
-       github.com/go-chassis/cari v0.5.1-0.20211124031617-99bda218b0cf
+       github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e
        github.com/go-chassis/foundation v0.3.1-0.20210811025651-7f4d2b2b906c
        github.com/go-chassis/go-archaius v1.5.1
        github.com/go-chassis/go-chassis-extension/protocol/grpc 
v0.0.0-20210902082902-eb5df922afcd
diff --git a/go.sum b/go.sum
index c49fa85..836ac22 100644
--- a/go.sum
+++ b/go.sum
@@ -179,8 +179,8 @@ github.com/go-chassis/cari 
v0.0.0-20201210041921-7b6fbef2df11/go.mod h1:MgtsEI0A
 github.com/go-chassis/cari v0.4.0/go.mod 
h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
 github.com/go-chassis/cari v0.5.0/go.mod 
h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
 github.com/go-chassis/cari v0.5.1-0.20210823023004-74041d1363c4/go.mod 
h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
-github.com/go-chassis/cari v0.5.1-0.20211124031617-99bda218b0cf 
h1:870QYgkSLFhpqGA8YuCRPazgdAKP4oqs5vs09A6d/gE=
-github.com/go-chassis/cari v0.5.1-0.20211124031617-99bda218b0cf/go.mod 
h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
+github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e 
h1:6z88U255Sm/Ds10uT7ZqYomKLanDzTWxseDBITONFhk=
+github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e/go.mod 
h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
 github.com/go-chassis/foundation v0.2.2-0.20201210043510-9f6d3de40234/go.mod 
h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
 github.com/go-chassis/foundation v0.2.2/go.mod 
h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
 github.com/go-chassis/foundation v0.3.0/go.mod 
h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=

Reply via email to