mirror of
https://gitee.com/rainbond/Rainbond.git
synced 2024-12-04 04:38:04 +08:00
98 lines
3.2 KiB
Go
98 lines
3.2 KiB
Go
// Copyright (C) 2014-2018 Goodrain Co., Ltd.
|
|
// RAINBOND, Application Management Platform
|
|
|
|
// 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 parser
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
"github.com/goodrain/rainbond/builder/parser/discovery"
|
|
"github.com/goodrain/rainbond/event"
|
|
)
|
|
|
|
// ThirdPartyServiceParse is one of the implematation of parser.Parser
|
|
type ThirdPartyServiceParse struct {
|
|
sourceBody string
|
|
|
|
endpoints []*discovery.Endpoint
|
|
|
|
errors []ParseError
|
|
logger event.Logger
|
|
}
|
|
|
|
// CreateThirdPartyServiceParse creates a new ThirdPartyServiceParse.
|
|
func CreateThirdPartyServiceParse(sourceBody string, logger event.Logger) Parser {
|
|
return &ThirdPartyServiceParse{
|
|
sourceBody: sourceBody,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// Parse blablabla
|
|
func (t *ThirdPartyServiceParse) Parse() ParseErrorList {
|
|
// empty t.sourceBody means the service has static endpoints
|
|
// static endpoints is no need to do service check.
|
|
if strings.Replace(t.sourceBody, " ", "", -1) == "" {
|
|
return nil
|
|
}
|
|
|
|
var info discovery.Info
|
|
if err := json.Unmarshal([]byte(t.sourceBody), &info); err != nil {
|
|
logrus.Errorf("wrong source_body: %v, source_body: %s", err, t.sourceBody)
|
|
t.logger.Error("第三方检查输入参数错误", map[string]string{"step": "parse"})
|
|
t.errors = append(t.errors, ParseError{FatalError, "wrong input data", ""})
|
|
return t.errors
|
|
}
|
|
// TODO: validate data
|
|
|
|
d := discovery.NewDiscoverier(&info)
|
|
err := d.Connect()
|
|
if err != nil {
|
|
t.logger.Error("error connecting discovery center", map[string]string{"step": "parse"})
|
|
t.errors = append(t.errors, ParseError{FatalError, "error connecting discovery center", "please make sure " +
|
|
"the configuration is right and the discovery center is working."})
|
|
return t.errors
|
|
}
|
|
defer d.Close()
|
|
eps, err := d.Fetch()
|
|
if err != nil {
|
|
t.logger.Error("error fetching endpints", map[string]string{"step": "parse"})
|
|
t.errors = append(t.errors, ParseError{FatalError, "error fetching endpints", "please check the given key."})
|
|
return t.errors
|
|
}
|
|
t.endpoints = eps
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetServiceInfo returns information of third-party service from
|
|
// the receiver *ThirdPartyServiceParse.
|
|
func (t *ThirdPartyServiceParse) GetServiceInfo() []ServiceInfo {
|
|
serviceInfo := ServiceInfo{
|
|
Endpoints: t.endpoints,
|
|
}
|
|
return []ServiceInfo{serviceInfo}
|
|
}
|
|
|
|
// GetImage is a dummy method. there is no image for Third-party service.
|
|
func (t *ThirdPartyServiceParse) GetImage() Image {
|
|
return Image{}
|
|
}
|