136 lines
3.6 KiB
Go
136 lines
3.6 KiB
Go
package gateway
|
|
|
|
import (
|
|
"golang.org/x/net/context"
|
|
pb "git.loafle.net/overflow/overflow_api_service/grpc"
|
|
"github.com/golang/glog"
|
|
"encoding/json"
|
|
"reflect"
|
|
"errors"
|
|
"log"
|
|
|
|
"git.loafle.net/overflow/overflow_service/proxy/noauthagent"
|
|
"git.loafle.net/overflow/overflow_service/proxy/target"
|
|
"git.loafle.net/overflow/overflow_service/proxy/member"
|
|
"git.loafle.net/overflow/overflow_service/proxy/crawler"
|
|
"git.loafle.net/overflow/overflow_service/proxy/crawlerInputItem"
|
|
"git.loafle.net/overflow/overflow_service/proxy/crawlerinputitemmapping"
|
|
"git.loafle.net/overflow/overflow_service/proxy/sensor"
|
|
"git.loafle.net/overflow/overflow_service/proxy/sensorItem"
|
|
"git.loafle.net/overflow/overflow_service/proxy/sensorItemCategory"
|
|
"git.loafle.net/overflow/overflow_service/proxy/sensorItemMapping"
|
|
"git.loafle.net/overflow/overflow_service/proxy/agent"
|
|
//"google.golang.org/grpc/metadata"
|
|
|
|
)
|
|
|
|
var g_services map[string]interface{}
|
|
|
|
func AddServices(name string, s interface{}) {
|
|
if g_services == nil {
|
|
g_services = make(map[string]interface{},0)
|
|
}
|
|
|
|
g_services[name] = s
|
|
}
|
|
|
|
type Services interface {
|
|
GetModel()(interface{})
|
|
}
|
|
|
|
func InitServices() {
|
|
g_services = make(map[string]interface{},0)
|
|
|
|
// proxy services save
|
|
//AddServices("Agent", agent.NewAgentService())
|
|
AddServices("Member", member.NewMemberService())
|
|
AddServices("NoAuthAgent", noauthagent.NewNoAuthAgentService())
|
|
AddServices("Agent", agent.NewAgentService())
|
|
AddServices("Target", target.NewTargetService())
|
|
AddServices("Crawler", crawler.NewCrawlerService())
|
|
AddServices("CrawlerInputItem", crawlerInputItem.NewCrawlerInputItemService())
|
|
AddServices("CrawlerInputItemMapping", crawlerinputitemmapping.NewCrawlerInputItemMappingService())
|
|
AddServices("Sensor", sensor.NewSensorService())
|
|
AddServices("SensorItem", sensorItem.NewSensorItemService())
|
|
AddServices("SensorItemCategory", sensorItemCategory.NewSensorItemCategoryService())
|
|
AddServices("SensorItemMapping", sensorItemMapping.NewSensorItemMappingService())
|
|
|
|
}
|
|
type ServiceImpl struct {
|
|
|
|
}
|
|
|
|
func (s *ServiceImpl) ExecServices(c context.Context, in *pb.ServiceInput) (*pb.ServiceOutput, error) {
|
|
// Check Service Name
|
|
serviceName, ok := g_services[in.ServiceName]
|
|
//metadata.FromContext(c)
|
|
log.Println("Service Name : " + in.ServiceName + " MethodName : " + in.MethodName)
|
|
|
|
if !ok {
|
|
|
|
return nil, errors.New("Not Exist Service Name")
|
|
}
|
|
|
|
|
|
|
|
pbs := &pb.ServiceOutput{}
|
|
methodName := reflect.ValueOf(serviceName).MethodByName(in.MethodName)
|
|
|
|
|
|
if methodName.IsValid() == false {
|
|
return pbs, errors.New("Not Exist Method Name")
|
|
}
|
|
|
|
params := make([]reflect.Value, methodName.Type().NumIn())
|
|
var NewObj reflect.Value
|
|
|
|
for i := 0; i < methodName.Type().NumIn(); i++{
|
|
temp := methodName.Type().In(i)
|
|
|
|
switch temp.Kind() {
|
|
case reflect.Ptr:
|
|
NewObj = reflect.New(temp.Elem())
|
|
}
|
|
convertParam(NewObj.Interface(), in.Param)
|
|
params[i] = NewObj
|
|
}
|
|
|
|
// Todo Call Service Method
|
|
results := methodName.Call(params);
|
|
|
|
result := results[0].Interface().(string)
|
|
|
|
var err error = nil;
|
|
if len(result) > 1 {
|
|
obj := results[1].Interface()
|
|
if obj != nil {
|
|
log.Println("err : " + err.Error())
|
|
err = obj.(error)
|
|
return pbs, err
|
|
}
|
|
}
|
|
|
|
|
|
pbs.ResultStr = result
|
|
|
|
return pbs, nil
|
|
}
|
|
|
|
func convertParam(sn interface{}, param map[string]string) {
|
|
|
|
// param convert string
|
|
//paramStr, err := json.Marshal(param)
|
|
//if err != nil {
|
|
// glog.Fatal("Json Marshal Failed : ", err.Error())
|
|
//}
|
|
|
|
paramStr := param["model"]
|
|
// service converting
|
|
log.Println("input model : ", paramStr)
|
|
err := json.Unmarshal([]byte(paramStr), sn)
|
|
if err != nil {
|
|
glog.Fatal("Json Unmarshal Failed : ", err.Error())
|
|
}
|
|
|
|
}
|