From 125ed009bf9c25c0012d042472522b35a565d86c Mon Sep 17 00:00:00 2001
From: Ming Deng <mindeng@ebay.com>
Date: Sun, 29 Sep 2019 23:09:47 +0800
Subject: [PATCH] Define the interface of TpsLimitFilter

---
 filter/impl/tps_limit_filter.go              | 54 ++++++++++++++++++++
 filter/impl/tps_limit_filter_test.go         | 18 +++++++
 filter/impl/tps_limiter.go                   | 27 ++++++++++
 filter/impl/tps_limiter_fixed_window_impl.go | 35 +++++++++++++
 4 files changed, 134 insertions(+)
 create mode 100644 filter/impl/tps_limit_filter.go
 create mode 100644 filter/impl/tps_limit_filter_test.go
 create mode 100644 filter/impl/tps_limiter.go
 create mode 100644 filter/impl/tps_limiter_fixed_window_impl.go

diff --git a/filter/impl/tps_limit_filter.go b/filter/impl/tps_limit_filter.go
new file mode 100644
index 000000000..6ada1aa61
--- /dev/null
+++ b/filter/impl/tps_limit_filter.go
@@ -0,0 +1,54 @@
+/*
+ * 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 impl
+
+import (
+	"github.com/apache/dubbo-go/common/extension"
+	"github.com/apache/dubbo-go/filter"
+	"github.com/apache/dubbo-go/protocol"
+)
+
+const (
+	TpsLimitFilterKey = "tps"
+)
+
+func init() {
+	extension.SetFilter(TpsLimitFilterKey, GetAccessLogFilter)
+}
+
+/**
+ *
+ */
+type TpsLimitFilter struct {
+	
+}
+
+func (t TpsLimitFilter) Invoke(invoker protocol.Invoker,invocation protocol.Invocation) protocol.Result {
+	invoker.GetUrl()
+	invoker.IsAvailable()
+	return invoker.Invoke(invocation)
+}
+
+func (t TpsLimitFilter) OnResponse(result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
+	return result
+}
+
+func GetTpsLimitFilter() filter.Filter {
+	var tpsLimitFilter = TpsLimitFilter{}
+	return tpsLimitFilter
+}
diff --git a/filter/impl/tps_limit_filter_test.go b/filter/impl/tps_limit_filter_test.go
new file mode 100644
index 000000000..2ac8beceb
--- /dev/null
+++ b/filter/impl/tps_limit_filter_test.go
@@ -0,0 +1,18 @@
+/*
+ * 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 impl
diff --git a/filter/impl/tps_limiter.go b/filter/impl/tps_limiter.go
new file mode 100644
index 000000000..ee24c8c1b
--- /dev/null
+++ b/filter/impl/tps_limiter.go
@@ -0,0 +1,27 @@
+/*
+ * 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 impl
+
+import (
+	"github.com/apache/dubbo-go/common"
+	"github.com/apache/dubbo-go/protocol"
+)
+
+type TpsLimiter interface {
+	IsAllowable(common.URL, protocol.Invocation)
+}
\ No newline at end of file
diff --git a/filter/impl/tps_limiter_fixed_window_impl.go b/filter/impl/tps_limiter_fixed_window_impl.go
new file mode 100644
index 000000000..6f4a3360f
--- /dev/null
+++ b/filter/impl/tps_limiter_fixed_window_impl.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 impl
+
+import (
+	"github.com/apache/dubbo-go/common"
+	"github.com/apache/dubbo-go/protocol"
+)
+
+type FixedWindowTpsLimiterImpl struct {
+
+}
+
+func (limiter FixedWindowTpsLimiterImpl) IsAllowable(common.URL, protocol.Invocation) {
+	panic("implement me")
+}
+
+func NewInstance() TpsLimiter {
+	return FixedWindowTpsLimiterImpl{}
+}
-- 
GitLab