mirror of
https://gitee.com/rainbond/Rainbond.git
synced 2024-12-03 04:07:51 +08:00
168 lines
4.3 KiB
Go
168 lines
4.3 KiB
Go
// RAINBOND, Application Management Platform
|
|
// Copyright (C) 2014-2017 Goodrain Co., Ltd.
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version. For any non-GPL usage of Rainbond,
|
|
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
|
|
// must be obtained first.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
package v1
|
|
|
|
type ProtocolType string
|
|
|
|
const (
|
|
STREAM ProtocolType = "stream"
|
|
HTTP ProtocolType = "http"
|
|
)
|
|
|
|
//VirtualService VirtualService
|
|
type VirtualService struct {
|
|
Meta
|
|
Enabled bool `json:"enable"`
|
|
Protocol ProtocolType `json:"protocol"` //default stream
|
|
// BackendProtocol indicates which protocol should be used to communicate with the service
|
|
BackendProtocol string `json:"backend-protocol"`
|
|
Port int32 `json:"port"`
|
|
Listening []string `json:"listening"` //if Listening is nil,will listen all
|
|
Note string `json:"note"`
|
|
DefaultPoolName string `json:"default_pool_name"`
|
|
RuleNames []string `json:"rule_names"`
|
|
SSLdecrypt bool `json:"ssl_decrypt"`
|
|
DefaultCertificateName string `json:"default_certificate_name"`
|
|
RequestLogEnable bool `json:"request_log_enable"`
|
|
RequestLogFileName string `json:"request_log_file_name"`
|
|
RequestLogFormat string `json:"request_log_format"`
|
|
//ConnectTimeout The time, in seconds, to wait for data from a new connection. If no data is received within this time, the connection will be closed. A value of 0 (zero) will disable the timeout.
|
|
ConnectTimeout int `json:"connect_timeout"`
|
|
//Timeout A connection should be closed if no additional data has been received for this period of time. A value of 0 (zero) will disable this timeout. Note that the default value may vary depending on the protocol selected.
|
|
Timeout int `json:"timeout"`
|
|
|
|
ServerName string `json:"server_name"`
|
|
PoolName string `json:"pool_name"`
|
|
SSLCert *SSLCert `json:"ssl_cert"`
|
|
Locations []*Location `json:"locations"`
|
|
ForceSSLRedirect bool `json:"force_ssl_redirect"`
|
|
}
|
|
|
|
func (v *VirtualService) Equals(c *VirtualService) bool {
|
|
if v == c {
|
|
return true
|
|
}
|
|
if v == nil || c == nil {
|
|
return false
|
|
}
|
|
if !v.Meta.Equals(&c.Meta) {
|
|
return false
|
|
}
|
|
if v.Enabled != c.Enabled {
|
|
return false
|
|
}
|
|
if v.Protocol != c.Protocol {
|
|
return false
|
|
}
|
|
if v.BackendProtocol != c.BackendProtocol {
|
|
return false
|
|
}
|
|
if v.Port != c.Port {
|
|
return false
|
|
}
|
|
|
|
// TODO
|
|
if len(v.Listening) != len(c.Listening) {
|
|
return false
|
|
}
|
|
for _, vl := range v.Listening {
|
|
flag := false
|
|
for _, cl := range c.Listening {
|
|
if vl == cl {
|
|
flag = true
|
|
break
|
|
}
|
|
}
|
|
if !flag {
|
|
return false
|
|
}
|
|
}
|
|
|
|
if v.Note != c.Note {
|
|
return false
|
|
}
|
|
if v.DefaultPoolName != c.DefaultPoolName {
|
|
return false
|
|
}
|
|
|
|
// TODO
|
|
if len(v.RuleNames) != len(c.RuleNames) {
|
|
return false
|
|
}
|
|
for _, vr := range v.RuleNames {
|
|
flag := false
|
|
for _, cr := range c.RuleNames {
|
|
if vr == cr {
|
|
flag = true
|
|
break
|
|
}
|
|
}
|
|
if !flag {
|
|
return false
|
|
}
|
|
}
|
|
|
|
if v.SSLdecrypt != c.SSLdecrypt {
|
|
return false
|
|
}
|
|
if v.DefaultCertificateName != c.DefaultCertificateName {
|
|
return false
|
|
}
|
|
|
|
if v.RequestLogEnable != c.RequestLogEnable {
|
|
return false
|
|
}
|
|
if v.RequestLogFileName != c.RequestLogFileName {
|
|
return false
|
|
}
|
|
if v.RequestLogFormat != c.RequestLogFormat {
|
|
return false
|
|
}
|
|
if v.ConnectTimeout != c.ConnectTimeout {
|
|
return false
|
|
}
|
|
if v.Timeout != c.Timeout {
|
|
return false
|
|
}
|
|
if v.ServerName != c.ServerName {
|
|
return false
|
|
}
|
|
if v.PoolName != c.PoolName {
|
|
return false
|
|
}
|
|
|
|
if len(v.Locations) != len(c.Locations) {
|
|
return false
|
|
}
|
|
for _, vloc := range v.Locations {
|
|
flag := false
|
|
for _, cloc := range c.Locations {
|
|
if vloc.Equals(cloc) {
|
|
flag = true
|
|
break
|
|
}
|
|
}
|
|
if !flag {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|