This commit is contained in:
snoop 2017-04-14 16:23:42 +09:00
parent cf37b9d0cb
commit 76ffa421e3
5 changed files with 284 additions and 16 deletions

9
connection_pool.go Normal file
View File

@ -0,0 +1,9 @@
package crawler_manager
import "google.golang.org/grpc"
func (c *crawler_manager)GetClient(container string) (*grpc.ClientConn, error) {
return nil, nil
}

View File

@ -6,7 +6,7 @@ import (
"log" "log"
g "loafle.com/overflow/crawler_go/grpc" g "loafle.com/overflow/crawler_go/grpc"
"context" "context"
"loafle.com/overflow/crawler_go/config"
"encoding/json" "encoding/json"
) )
@ -34,9 +34,38 @@ func CallAdd() {
} }
func CallInit(c *config.Config, path string) { func CallInit2(address string, cpm *map[string][]string) bool {
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
return false
}
defer conn.Close()
port := portMap[c.Crawler.Name] cc := g.NewConfigClient(conn)
in := &g.Init{}
in.Path = "/home/snoop/develop/path/go/src/loafle.com/overflow/crawler_go/config/"
//in.Name = g.Crawlers(g.Crawlers_value[""])
in.Name = g.Crawlers_HEALTH_REDIS
inArr := &g.InputArray{}
inArr.In = append(inArr.In, in)
outInit, errInit := cc.Init(context.Background(), inArr)
if errInit != nil {
log.Println(errInit)
return false
}
log.Println(outInit)
return true
}
func CallInit(crawlerName string, path string) {
port := portMap[crawlerName]
conn, err := grpc.Dial(address+port, grpc.WithInsecure()) conn, err := grpc.Dial(address+port, grpc.WithInsecure())
if err != nil { if err != nil {
@ -50,7 +79,7 @@ func CallInit(c *config.Config, path string) {
in.Path = filepath.Dir(path)+ "/" in.Path = filepath.Dir(path)+ "/"
in.Name = g.Crawlers(g.Crawlers_value[c.Crawler.Name]) in.Name = g.Crawlers(g.Crawlers_value[crawlerName])
inArr := &g.InputArray{} inArr := &g.InputArray{}
inArr.In = append(inArr.In, in) inArr.In = append(inArr.In, in)

View File

@ -11,19 +11,31 @@ import (
"io/ioutil" "io/ioutil"
) )
const ( const (
address = "localhost:" address = "localhost:"
defaultPort = 50001 defaultPort = 80
rootFolder = "/home/cm/"
ConfigFolder = rootFolder + "/config/"
BinaryFolder = rootFolder + "/container/"
PidFolder = rootFolder + "/pids/"
runFile = "tnc"
) )
type crawler_manager struct {
}
var currentPort = defaultPort var currentPort = defaultPort
var pidMap map[string]int var pidMap map[string]int
var exeMap map[string]string var exeMap map[string]string
var portMap map[string]string var portMap map[string]string
func init() { func init() {
@ -55,7 +67,7 @@ func ReadConfig(path string ) *config.Config {
} }
func ManageCrawler(path string) { func AddConfig(path string) {
c := ReadConfig(path) c := ReadConfig(path)
@ -68,16 +80,125 @@ func ManageCrawler(path string) {
if pid > 0 { if pid > 0 {
b := IsAlive(pid) b := IsAlive(pid)
if b == false { if b == false {
ExeCrawler(c, exePath) ExeCrawler(c.Crawler.Name, exePath)
CallInit(c, path) CallInit(c.Crawler.Name, path)
} else { } else {
CallAdd() CallAdd()
} }
} else { } else {
ExeCrawler(c, exePath) ExeCrawler(c.Crawler.Name, exePath)
CallInit(c, path) CallInit(c.Crawler.Name, path)
} }
} }
func InitContainer() {
cs := IsStartContainer()
var cpm map[string][]string = make(map[string][]string)
var ccl []string
for _, c := range cs {
ExistConfigFileDir(ConfigFolder, c, &ccl)
cpm[c] = ccl
RunContainer(&c, &cpm)
}
//startContainer
//isPid
//
}
func IsStartContainer() []string {
files, _ := ioutil.ReadDir(ConfigFolder)
var cs []string
for _,file := range files {
if file.IsDir() {
b := ExistConfigFile(ConfigFolder, file.Name())
if b {
cs = append(cs, file.Name())
}
}
}
return cs
}
func ExistConfigFile(prePath string,dir string) bool {
files, _ := ioutil.ReadDir(prePath + "/" +dir)
for _,file := range files {
if file.IsDir() {
retB := ExistConfigFile(prePath + "/" + dir, file.Name())
if retB {
return true
}
} else {
return true
}
}
return false
}
func ExistConfigFileDir(prePath string,dir string, configCrawler *[]string) {
files, _ := ioutil.ReadDir(prePath + "/" +dir)
for _,file := range files {
if file.IsDir() {
ExistConfigFileDir(prePath + "/" + dir, file.Name(), configCrawler)
} else {
*configCrawler = append(*configCrawler, prePath + "/" +dir)
return;
}
}
}
//func ExistFile(path string) bool {
//
//
//
//}
func AddConfig22() {
}
func AddCrawler() {
}
//parameter crawler list
func GetCrawlerPort() {
//check crawler run
//crawler exe
//ExeCrawler()
//return crawler = port
//return portMap
}

View File

@ -10,10 +10,11 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"io/ioutil"
) )
func TestManageCrawler(t *testing.T) { func TestManageCrawler(t *testing.T) {
ManageCrawler("/home/snoop/develop/path/go/src/loafle.com/overflow/crawler_manager_go/config/example.json") AddConfig("/home/snoop/develop/path/go/src/loafle.com/overflow/crawler_manager_go/config/example.json")
} }
func TestAdd(t *testing.T) { func TestAdd(t *testing.T) {
@ -138,3 +139,76 @@ func TestDir(t *testing.T) {
func TestMyPid(t *testing.T) { func TestMyPid(t *testing.T) {
t.Log(os.Getpid()) t.Log(os.Getpid())
} }
func TestDir22(t *testing.T) {
cs := IsStartContainer()
t.Log(cs)
}
func TestCrateDir(t *testing.T) {
var configPath []string;
configPath = append(configPath, ConfigFolder + "/java/oracle/")
configPath = append(configPath, ConfigFolder + "/go/test/")
configPath = append(configPath, ConfigFolder + "/java/mysql/")
configPath = append(configPath, ConfigFolder + "/network/http/")
configPath = append(configPath, ConfigFolder + "/network/ldap/")
configPath = append(configPath, ConfigFolder + "/network/redis/")
var containerPath []string;
containerPath = append(containerPath, BinaryFolder + "/java/")
containerPath = append(containerPath, BinaryFolder + "/go/")
containerPath = append(containerPath, BinaryFolder + "/network/")
containerPath = append(containerPath, PidFolder)
b, _:=ioutil.ReadFile("/home/snoop/develop/path/go/src/loafle.com/overflow/crawler_go/config/example.json")
for i, p := range configPath {
pp := filepath.Join(p)
os.MkdirAll(pp, os.ModePerm)
if i % 2 == 0 {
ioutil.WriteFile(pp + "/id.json", b, os.ModePerm)
}
}
for _, p := range containerPath {
pp := filepath.Join(p)
os.MkdirAll(pp, os.ModePerm)
}
}
func TestInit(t *testing.T) {
InitContainer()
}
func TestDirs(t *testing.T) {
cs := IsStartContainer()
for _, c := range cs {
var ccl []string
ExistConfigFileDir(ConfigFolder, c, &ccl)
t.Log(ccl)
}
}

View File

@ -3,15 +3,50 @@ package crawler_manager
import ( import (
"log" "log"
"loafle.com/overflow/crawler_go/config"
"os/exec" "os/exec"
"time" "time"
"strconv" "strconv"
"strings" "strings"
) )
func RunContainer(container *string, cpm *map[string][]string) {
cmdStr := getRunCommand(container)
for {
pArg := "-Port=" + strconv.Itoa(currentPort)
cmd := exec.Command(cmdStr, pArg)
err := cmd.Start()
if err != nil {
log.Println(err)
}
time.Sleep(time.Duration( time.Second * 2))
b := CallInit2("localhost:" + strconv.Itoa(currentPort), cpm)
log.Println("current Port:" , currentPort)
if b == false {
currentPort++
continue;
}
log.Println(*container + " run success port:" , currentPort , "pid:", cmd.Process.Pid )
currentPort++
break;
}
}
func getRunCommand(container *string ) string {
return BinaryFolder + "/" + *container + "/" + runFile
}
//FIXME:: process check!!!!!! //FIXME:: process check!!!!!!
func ExeCrawler(c *config.Config, exePath string) { func ExeCrawler(crawlerName string, exePath string) {
log.Println("Run Crawler") log.Println("Run Crawler")
for { for {
@ -33,7 +68,7 @@ func ExeCrawler(c *config.Config, exePath string) {
continue continue
} }
portMap[c.Crawler.Name] = strconv.Itoa(currentPort) portMap[crawlerName] = strconv.Itoa(currentPort)
log.Println("current port:", currentPort) log.Println("current port:", currentPort)
//FIXME::remove //FIXME::remove
break break