本文整理汇总了Golang中github.com/ian-kent/go-log/log.Info函数的典型用法代码示例。如果您正苦于以下问题:Golang Info函数的具体用法?Golang Info怎么用?Golang Info使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Info函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: ParseCPANLines
func ParseCPANLines(lines []string) (*CPANFile, error) {
cpanfile := &CPANFile{}
for _, l := range lines {
if len(l) == 0 {
continue
}
log.Trace("Parsing line: %s", l)
dep, err := ParseCPANLine(l)
if err != nil {
log.Error("=> Error parsing line: %s", err)
continue
}
if dep != nil {
log.Info("=> Found dependency: %s", dep)
cpanfile.AddDependency(dep)
continue
}
log.Trace("=> No error and no dependency found")
}
log.Info("Found %d dependencies in cpanfile", len(cpanfile.Dependencies))
return cpanfile, nil
}
开发者ID:companieshouse,项目名称:gopan,代码行数:29,代码来源:cpanfile.go
示例2: Listen
// Listen binds to httpBindAddr
func Listen(httpBindAddr string, Asset func(string) ([]byte, error), exitCh chan int, registerCallback func(http.Handler)) {
log.Info("[HTTP] Binding to address: %s", httpBindAddr)
pat := pat.New()
registerCallback(pat)
f := func(w http.ResponseWriter, req *http.Request) {
if Authorised == nil {
pat.ServeHTTP(w, req)
return
}
u, pw, ok := req.BasicAuth()
if !ok || !Authorised(u, pw) {
w.Header().Set("WWW-Authenticate", "Basic")
w.WriteHeader(401)
return
}
pat.ServeHTTP(w, req)
}
err := http.ListenAndServe(httpBindAddr, http.HandlerFunc(f))
if err != nil {
log.Fatalf("[HTTP] Error binding to address %s: %s", httpBindAddr, err)
}
}
开发者ID:danielwhite,项目名称:http,代码行数:27,代码来源:server.go
示例3: loadBackPANSource
func (s *Source) loadBackPANSource() error {
log.Info("Loading BackPAN index: backpan-index")
file, err := os.Open("backpan-index")
if err != nil {
log.Warn(err.Error())
return nil
}
index, err := ioutil.ReadAll(file)
file.Close()
if err != nil {
log.Fatal(err)
}
for _, p := range strings.Split(string(index), "\n") {
if !strings.HasPrefix(p, "authors/id/") {
continue
}
//log.Printf("Parsing: %s\n", p)
m := s.ModuleFromBackPANIndex(p)
if m != nil {
s.ModuleList[m.Name+"-"+m.Version] = m
}
}
log.Printf("Found %d packages for source: %s", len(s.ModuleList), s)
return nil
}
开发者ID:companieshouse,项目名称:gopan,代码行数:30,代码来源:sources.go
示例4: ExecFunction
func (ws *Workspace) ExecFunction(task *Task, name string, args ...string) string {
log.Info("Executing function %s: %s", name, args)
var fn *Function
if f, ok := ws.Functions[name]; ok {
fn = f
} else if f, ok := GlobalWorkspace.Functions[name]; ok {
fn = f
} else {
log.Warn("Function not found: %s", name)
return ""
}
argmap := make(map[string]string)
for i, arg := range fn.Args {
argmap[arg] = args[i]
}
for k, v := range argmap {
log.Info("argmap: %s => %s", k, v)
for t, m := range task.Metadata {
log.Info("meta: %s => %s", t, m)
v = strings.Replace(v, "$"+t, m, -1)
}
argmap[k] = v
}
c := fn.Command
for k, v := range argmap {
log.Info("ARG: %s => %s", k, v)
c = strings.Replace(c, k, v, -1)
}
var funcEnvironment map[string]string
if ws.InheritEnvironment {
funcEnvironment = ws.Environment
} else if GlobalWorkspace.InheritEnvironment {
funcEnvironment = GlobalWorkspace.Environment
} else {
funcEnvironment = make(map[string]string)
}
tsk := NewTask(nil, "Function$"+name, fn.Executor, c, funcEnvironment, false, "", "", make(map[string]string), "")
ch := tsk.Start()
<-ch
return tsk.TaskRuns[0].StdoutBuf.String()
}
开发者ID:golang-devops,项目名称:websysd,代码行数:46,代码来源:task.go
示例5: loadSessionData
func (s *Session) loadSessionData() {
if sid_cookie, ok := s.Request.Cookies["__SID"]; ok {
s.SessionID = sid_cookie.Value
log.Info("Retrieved session ID (__SID): %s", s.SessionID)
}
s.readSessionData()
}
开发者ID:sogko,项目名称:gotcha,代码行数:8,代码来源:session.go
示例6: PrintDeps
func (deps *DependencyList) PrintDeps(d int) {
for _, dep := range deps.Dependencies {
if dep.Module == nil {
log.Info(MkIndent(0)+"%s not found", dep.Name)
continue
}
dep.Module.PrintDeps(d + 1)
}
}
开发者ID:companieshouse,项目名称:gopan,代码行数:9,代码来源:dependency.go
示例7: loadCPANSource
func (s *Source) loadCPANSource() error {
log.Info("Loading CPAN index: %s", s.Index)
res, err := http.Get(s.Index)
if err != nil {
log.Warn("Error loading index: %s", err)
return nil
}
// TODO optional gzip
r, err := gzip.NewReader(res.Body)
if err != nil {
log.Warn(err.Error())
b, _ := ioutil.ReadAll(res.Body)
log.Info("%s", string(b))
return nil
}
packages, err := ioutil.ReadAll(r)
res.Body.Close()
if err != nil {
log.Warn(err)
return nil
}
foundnl := false
for _, p := range strings.Split(string(packages), "\n") {
if !foundnl && len(p) == 0 {
foundnl = true
continue
}
if !foundnl || len(p) == 0 {
continue
}
m := s.ModuleFromCPANIndex(p)
s.ModuleList[m.Name] = m
}
log.Info("Found %d packages for source: %s", len(s.ModuleList), s)
return nil
}
开发者ID:companieshouse,项目名称:gopan,代码行数:41,代码来源:sources.go
示例8: createSessionId
func (r *Response) createSessionId() {
bytes := make([]byte, 256)
rand.Read(bytes)
s, _ := bcrypt.GenerateFromPassword(bytes, 11)
r.session.SessionID = string(s)
log.Info("Generated session ID (__SID): %s", r.session.SessionID)
r.Cookies.Set(&nethttp.Cookie{
Name: "__SID",
Value: r.session.SessionID,
Path: "/",
})
}
开发者ID:sogko,项目名称:gotcha,代码行数:12,代码来源:response.go
示例9: GetColumn
func (ws *Workspace) GetColumn(task *Task, name string) string {
log.Info("GetColumn: %s => %s", task.Name, name)
col := ws.Columns[name]
var fn []string
var nm string
for n, args := range col {
nm = n
fn = args
break
}
return ws.ExecFunction(task, nm, fn...)
}
开发者ID:francoishill,项目名称:websysd,代码行数:12,代码来源:task.go
示例10: LoadConfig
func LoadConfig(global string, workspaces []string) {
// Load global environment
log.Info("Loading global environment file: %s", global)
cfg, err := LoadConfigFile(global)
if err != nil {
log.Error("Error loading global configuration: %s", err.Error())
}
if cfg != nil {
GlobalConfigWorkspace = cfg
}
// Load workspaces
for _, conf := range workspaces {
log.Info("Loading workspace file: %s", conf)
cfg, err := LoadConfigFile(conf)
if err != nil {
log.Error("Error loading workspace: %s", err.Error())
}
if cfg != nil {
ConfigWorkspaces[cfg.Name] = cfg
}
}
}
开发者ID:francoishill,项目名称:websysd,代码行数:23,代码来源:config.go
示例11: readSessionData
func (s *Session) readSessionData() {
sd, ok := s.Request.Cookies["__SD"]
if ok && sd.Value != "" {
log.Info("Retrieved session data (__SD): %s", sd.Value)
sdata := make(map[string]string)
err := json.Unmarshal([]byte(fromBase64(sd.Value)), &sdata)
if err != nil {
s.RenderException(500, err)
return
}
s.SessionData = sdata
}
}
开发者ID:sogko,项目名称:gotcha,代码行数:15,代码来源:session.go
示例12: runLoop
func runLoop() {
conf, err := readConf()
AssertNoErr(err, "Failed to read config file")
log.Debug("Global conf: %#v", conf)
nif := conf["config"]["if"]
interval := atoi(conf["config"]["interval"], 5)
for name := range notifyOnChange(nif, interval) {
log.Info("Network changed: %s", name)
if section, ok := conf["ssid:"+name]; ok {
log.Debug("Found section: %v", section)
ApplyCmds(section)
} else {
log.Debug("Undefined section for: %s", name)
}
}
}
开发者ID:djui,项目名称:necd,代码行数:19,代码来源:main.go
示例13: ParseCPANLine
func ParseCPANLine(line string) (*Dependency, error) {
if len(line) == 0 {
return nil, nil
}
matches := re.FindStringSubmatch(line)
if len(matches) == 0 {
log.Trace("Unable to parse line: %s", line)
return nil, nil
}
module := matches[2]
version := strings.Replace(matches[4], " ", "", -1)
comment := matches[5]
dependency, err := DependencyFromString(module, version)
if strings.HasPrefix(strings.Trim(comment, " "), "# REQS: ") {
comment = strings.TrimPrefix(strings.Trim(comment, " "), "# REQS: ")
log.Trace("Found additional dependencies: %s", comment)
for _, req := range strings.Split(comment, ";") {
req = strings.Trim(req, " ")
bits := strings.Split(req, "-")
new_dep, err := DependencyFromString(bits[0], bits[1])
if err != nil {
log.Error("Error parsing REQS dependency: %s", req)
continue
}
log.Trace("Added dependency: %s", new_dep)
dependency.Additional = append(dependency.Additional, new_dep)
}
}
if err != nil {
return nil, err
}
log.Info("%s (%s %s)", module, dependency.Modifier, dependency.Version)
return dependency, err
}
开发者ID:companieshouse,项目名称:gopan,代码行数:41,代码来源:cpanfile.go
示例14: Find
func (s *Source) Find(d *Dependency) (*Module, error) {
log.Debug("Finding dependency: %s", d)
switch s.Type {
case "SmartPAN":
log.Debug("=> Using SmartPAN source")
url := s.URL
if !strings.HasSuffix(s.URL, "/") {
url += "/"
}
url += "where/" + d.Name + "/" + d.Modifier + d.Version
log.Info("Query: %s", url)
res, err := http.Get(url)
if err != nil {
log.Error("Error querying SmartPAN: %s", err.Error())
return nil, err
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
log.Trace("Got response: %s", string(body))
if res.StatusCode != http.StatusOK {
log.Info("Module not found in SmartPAN: %s", d.Name)
return nil, nil
}
var v *WhereOutput
if err = json.Unmarshal(body, &v); err != nil {
log.Error("Error parsing JSON: %s", err.Error())
return nil, err
}
log.Trace("Found module %s", v.Module)
if len(v.Versions) == 0 {
log.Info("Found module but no versions returned")
return nil, nil
}
var lv *VersionOutput
for _, ver := range v.Versions {
if ver.Version == v.Latest {
log.Info("Using latest version of %s: %f", v.Module, ver.Version)
lv = ver
break
}
}
if lv == nil {
log.Info("Couldn't find latest version, selecting first available")
lv = v.Versions[0]
}
return &Module{
Name: d.Name,
Version: fmt.Sprintf("%f", lv.Version),
Source: s,
Url: lv.URL,
}, nil
case "CPAN":
log.Debug("=> Using CPAN source")
if mod, ok := s.ModuleList[d.Name]; ok {
log.Trace("=> Found in source: %s", mod)
if d.Matches(mod) {
log.Trace("=> Version (%s) matches dependency: %s", mod.Version, d)
return mod, nil
}
log.Trace("=> Version (%s) doesn't match dependency: %s", mod.Version, d)
return nil, nil
}
case "BackPAN":
log.Debug("=> Using BackPAN source")
// TODO better version matching - new backpan index?
if mod, ok := s.ModuleList[d.Name+"-"+d.Version]; ok {
log.Trace("=> Found in source: %s", mod)
if d.Matches(mod) {
log.Trace("=> Version (%s) matches dependency: %s", mod.Version, d)
return mod, nil
}
log.Trace("=> Version (%s) doesn't match dependency: %s", mod.Version, d)
return nil, nil
}
case "MetaCPAN":
log.Debug("=> Using MetaCPAN source")
var sout, serr bytes.Buffer
var cpanm_args string = fmt.Sprintf("-L %s --info %s~\"%s%s\"", config.InstallDir, d.Name, d.Modifier, d.Version)
cpanm_cache_dir, err := filepath.Abs(config.CacheDir)
if err != nil {
log.Error("Failed to get absolute path of gopan cache directory: %s", err)
return nil, err
}
log.Trace("About to exec: cpanm %s", cpanm_args)
os.Setenv("CPANM_INFO_ARGS", cpanm_args)
//.........这里部分代码省略.........
开发者ID:companieshouse,项目名称:gopan,代码行数:101,代码来源:sources.go
示例15: LoadIndex
func LoadIndex(index string) map[string]*Source {
indexes := make(map[string]*Source)
log.Info("Loading cached index file %s", index)
if _, err := os.Stat(index); err != nil {
log.Error("Cached index file not found")
return indexes
}
var bytes []byte
if strings.HasSuffix(index, ".gz") {
fi, err := os.Open(index)
if err != nil {
log.Error("Error reading index: %s", err.Error())
return indexes
}
defer fi.Close()
gz, err := gzip.NewReader(fi)
if err != nil {
log.Error("Error creating gzip reader: %s", err.Error())
return indexes
}
bytes, err = ioutil.ReadAll(gz)
if err != nil {
log.Error("Error reading from gzip: %s", err.Error())
return indexes
}
} else {
var err error
bytes, err = ioutil.ReadFile(index)
if err != nil {
log.Error("Error reading index: %s", err.Error())
return indexes
}
}
lines := strings.Split(string(bytes), "\n")
var csource *Source
var cauth *Author
var cpkg *Package
resrcauth := regexp.MustCompile("^\\s*(.*)\\s\\[(.*)\\]\\s*$")
repackage := regexp.MustCompile("^\\s*(.*)\\s=>\\s(.*)\\s*$")
reprovides := regexp.MustCompile("^\\s*(.*)\\s\\((.*)\\):\\s(.*)\\s*$")
for _, l := range lines {
log.Trace("Line: %s", l)
if strings.HasPrefix(l, " ") {
// provides
log.Trace("=> Provides")
match := reprovides.FindStringSubmatch(l)
if len(match) > 0 {
if strings.HasPrefix(match[1], "-") {
log.Trace(" - Is a removal")
match[1] = strings.TrimPrefix(match[1], "-")
if _, ok := cpkg.Provides[match[1]]; ok {
delete(cpkg.Provides, match[1])
}
if len(cpkg.Provides) == 0 {
delete(cauth.Packages, cpkg.Name)
cpkg = nil
}
if len(cauth.Packages) == 0 {
delete(csource.Authors, cauth.Name)
cauth = nil
}
if len(csource.Authors) == 0 {
delete(indexes, csource.Name)
csource = nil
}
} else {
cpkg.Provides[match[1]] = &PerlPackage{
Name: match[1],
Version: match[2],
Package: cpkg,
File: match[3],
}
}
}
} else if strings.HasPrefix(l, " ") {
// its a package
log.Trace("=> Package")
match := repackage.FindStringSubmatch(l)
if len(match) > 0 {
if strings.HasPrefix(match[1], "-") {
log.Trace(" - Is a removal")
match[1] = strings.TrimPrefix(match[1], "-")
if _, ok := cauth.Packages[match[1]]; ok {
delete(cauth.Packages, match[1])
}
if len(cauth.Packages) == 0 {
delete(csource.Authors, cauth.Name)
cauth = nil
}
if len(csource.Authors) == 0 {
delete(indexes, csource.Name)
csource = nil
}
} else {
if _, ok := cauth.Packages[match[1]]; ok {
//.........这里部分代码省略.........
开发者ID:companieshouse,项目名称:gopan,代码行数:101,代码来源:index.go
示例16: where
func where(session *http.Session) {
module := session.Stash["module"].(string)
log.Info("Looking for module: %s", module)
ns := strings.Split(module, "::")
if _, ok := packages[ns[0]]; !ok {
log.Info("Top-level namespace [%s] not found", ns[0])
session.Response.Status = 404
session.Response.Send()
return
}
mod := packages[ns[0]]
ns = ns[1:]
for len(ns) > 0 {
if _, ok := mod.Children[ns[0]]; !ok {
log.Info("Child namespace [%s] not found", ns[0])
session.Response.Status = 404
session.Response.Send()
return
}
log.Info("Found child namespace [%s]", ns[0])
mod = mod.Children[ns[0]]
ns = ns[1:]
}
var version string
if _, ok := session.Stash["version"]; ok {
version = session.Stash["version"].(string)
if strings.HasPrefix(version, "v") {
version = strings.TrimPrefix(version, "v")
}
log.Info("Looking for version: %s", version)
}
if len(mod.Versions) == 0 {
log.Info("Module has no versions in index")
session.Response.Status = 404
session.Response.Send()
return
}
versions := make([]*VersionOutput, 0)
lv := float64(0)
if len(version) > 0 {
if ">0" == version {
// Take account of packages that have a version of 'undef'
for _, pkg := range mod.Packages {
packageURL := pkg.Package.VirtualURL()
urlmatches := packageUrlRe.FindStringSubmatch(packageURL)
if nil == urlmatches {
log.Info("Version requested [%s] not found", version)
session.Response.Status = 404
session.Response.Send()
return
}
ver := gopan.VersionFromString(urlmatches[2])
log.Info("Found version: %f", ver)
versions = append(versions, &VersionOutput{
Index: pkg.Package.Author.Source.Name,
URL: packageURL,
Path: pkg.Package.AuthorURL(),
Version: ver,
})
if ver > lv {
lv = ver
}
}
} else {
dep, _ := getpan.DependencyFromString(module, version)
for _, md := range mod.Versions {
var sver string = md.Version
if `undef` == md.Version {
sver = fmt.Sprintf("%.2f", md.Package.Version())
}
log.Info("Matching [%s] against derived version [%s] (md.Version [%s], md.Package.Version [%f])", dep.Version, sver, md.Version, md.Package.Version())
if dep.MatchesVersion(sver) {
vout := &VersionOutput{
Index: md.Package.Author.Source.Name,
URL: md.Package.VirtualURL(),
Path: md.Package.AuthorURL(),
Version: gopan.VersionFromString(sver),
}
versions = append(versions, vout)
ver := gopan.VersionFromString(sver)
if ver > lv {
lv = ver
}
}
}
}
if len(versions) == 0 {
log.Info("Version requested [%s] not found", version)
session.Response.Status = 404
session.Response.Send()
return
}
} else {
//.........这里部分代码省略.........
开发者ID:companieshouse,项目名称:gopan,代码行数:101,代码来源:smart.go
示例17: main
func main() {
config = getpan.Configure()
config.Dump()
mods := flag.Args()
if len(mods) == 0 {
if _, err := os.Stat(config.CPANFile); os.IsNotExist(err) {
log.Error("cpanfile not found: %s", config.CPANFile)
os.Exit(1)
}
}
if len(mods) > 0 && mods[0] == "exec" {
log.Debug("getpan exec => " + strings.Join(mods[1:], " "))
cmd := exec.Command(mods[1], mods[2:]...)
cmd.Env = os.Environ()
cmd.Env = append(cmd.Env, "PERL5LIB="+config.InstallDir+"/lib/perl5")
cmd.Env = append(cmd.Env, "PATH="+os.Getenv("PATH")+":"+config.InstallDir+"/bin")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
// debug so it doesn't show up in stdout/stderr unless -loglevel is used
log.Debug("Error in exec: %s", err.Error())
os.Exit(10)
}
return
}
for _, source := range config.Sources {
err := source.Load()
if err != nil {
log.Error("Error loading sources: %s", err)
os.Exit(1)
return
}
}
var deps *getpan.DependencyList
if len(mods) == 0 {
log.Info("Installing from cpanfile: %s", config.CPANFile)
d, err := getpan.ParseCPANFile(config.CPANFile)
if err != nil {
log.Error("Error parsing cpanfile: %s", err)
os.Exit(2)
return
}
deps = &d.DependencyList
} else {
log.Info("Installing from command line args")
deps = &getpan.DependencyList{
Dependencies: make([]*getpan.Dependency, 0),
}
for _, arg := range mods {
dependency, err := getpan.DependencyFromString(arg, "")
if err != nil {
log.Error("Unable to parse input: %s", arg)
continue
}
deps.AddDependency(dependency)
}
}
err := deps.Resolve()
if err != nil {
log.Error("Error resolving dependencies: %s", err)
os.Exit(3)
return
}
if false == config.NoDepdump {
log.Info("Resolved dependency tree:")
deps.PrintDeps(0)
}
if config.NoInstall {
log.Info("Skipping installation phase")
return
}
_, err = deps.Install()
if err != nil {
log.Error("Error installing dependencies: %s", err)
os.Exit(4)
return
}
// FIXME hacky, need a better way of tracking installed deps
log.Info("Successfully installed %d modules", deps.UniqueInstalled())
}
开发者ID:companieshouse,项目名称:gopan,代码行数:99,代码来源:main.go
示例18: main
func main() {
log.Logger().SetAppender(NewAppender())
global := "websysd.json"
flag.StringVar(&global, "global", global, "global environment configuration")
workspaces := make([]string, 0)
flag.Var((*AppendSliceValue)(&workspaces), "workspace", "websysd workspace file (can be specified multiple times), defaults to './workspace.json'")
// Create our Gotcha application
var app = gotcha.Create(Asset)
if len(workspaces) == 0 {
workspaces = append(workspaces, "./workspace.json")
}
LoadConfig(global, workspaces)
GlobalWorkspace = NewWorkspace(GlobalConfigWorkspace.Name, GlobalConfigWorkspace.Environment, make(map[string]map[string][]string), GlobalConfigWorkspace.InheritEnvironment)
for fn, args := range GlobalConfigWorkspace.Functions {
log.Info("=> Creating global function: %s", fn)
GlobalWorkspace.Functions[fn] = &Function{
Name: fn,
Args: args.Args,
Command: args.Command,
Executor: args.Executor,
}
}
if GlobalWorkspace.InheritEnvironment {
log.Info("=> Inheriting process environment into global workspace")
for _, k := range os.Environ() {
p := strings.SplitN(k, "=", 2)
if strings.TrimSpace(p[0]) == "" {
log.Warn("Skipping empty environment key")
continue
}
log.Info(" %s = %s", p[0], p[1])
// TODO variable subst for current env vars
if _, ok := GlobalWorkspace.Environment[p[0]]; !ok {
GlobalWorkspace.Environment[p[0]] = p[1]
}
}
}
for _, ws := range ConfigWorkspaces {
log.Info("=> Creating workspace: %s", ws.Name)
var workspace *Workspace
if wks, ok := Workspaces[ws.Name]; ok {
log.Warn("Workspace %s already exists, merging tasks and environment")
workspace = wks
} else {
workspace = NewWorkspace(ws.Name, ws.Environment, ws.Columns, ws.InheritEnvironment)
Workspaces[ws.Name] = workspace
}
workspace.IsLocked = ws.IsLocked
if workspace.InheritEnvironment && !GlobalWorkspace.InheritEnvironment {
log.Info("=> Inheriting process environment into workspace")
for _, k := range os.Environ() {
p := strings.SplitN(k, "=", 2)
if strings.TrimSpace(p[0]) == "" {
log.Warn("Skipping empty environment key")
continue
}
log.Info(" %s = %s", p[0], p[1])
// TODO variable subst for current env vars
if _, ok := workspace.Environment[p[0]]; !ok {
workspace.Environment[p[0]] = p[1]
}
}
}
for fn, args := range ws.Functions {
log.Info("=> Creating workspace function: %s", fn)
workspace.Functions[fn] = &Function{
Name: fn,
Args: args.Args,
Command: args.Command,
Executor: args.Executor,
}
}
for _, t := range ws.Tasks {
log.Info("=> Creating task: %s", t.Name)
if _, ok := workspace.Tasks[t.Name]; ok {
log.Warn("Task %s already exists, overwriting")
}
env := make(map[string]string)
for k, v := range GlobalWorkspace.Environment {
env[k] = v
}
for k, v := range ws.Environment {
env[k] = v
}
for k, v := range t.Environment {
//.........这里部分代码省略.........
开发者ID:golang-devops,项目名称:websysd,代码行数:101,代码来源:main.go
示例19: Start
func (tr *TaskRun) Start(exitCh chan int) {
tr.Started = time.Now()
stdout, err := tr.Cmd.StdoutPipe()
if err != nil {
tr.Error = err
exitCh <- 1
return
}
stderr, err := tr.Cmd.StderrPipe()
if err != nil {
tr.Error = err
exitCh <- 1
return
}
if len(tr.Stdout) > 0 {
wr, err := NewFileLogWriter(tr.Stdout)
if err != nil {
log.Error("Unable to open file %s: %s", tr.Stdout, err.Error())
tr.StdoutBuf = NewInMemoryLogWriter()
} else {
tr.StdoutBuf = wr
}
} else {
tr.StdoutBuf = NewInMemoryLogWriter()
}
if len(tr.Stderr) > 0 {
wr, err := NewFileLogWriter(tr.Stderr)
if err != nil {
log.Error("Unable to open file %s: %s", tr.Stderr, err.Error())
tr.StderrBuf = NewInMemoryLogWriter()
} else {
tr.StderrBuf = wr
}
} else {
tr.StderrBuf = NewInMemoryLogWriter()
}
if len(tr.Pwd) > 0 {
log.Info("Setting pwd: %s", tr.Pwd)
tr.Cmd.Dir = tr.Pwd
}
for k, v := range tr.Environment {
log.Info("Adding env var %s = %s", k, v)
tr.Cmd.Env = append(tr.Cmd.Env, k+"="+v)
}
err = tr.Cmd.Start()
if tr.Cmd.Process != nil {
ev := &Event{time.Now(), fmt.Sprintf("Process %d started: %s", tr.Cmd.Process.Pid, tr.Command)}
log.Info(ev.Message)
tr.Events = append(tr.Events, ev)
}
if err != nil {
tr.Error = err
log.Error(err.Error())
tr.StdoutBuf.Close()
tr.StderrBuf.Close()
exitCh <- 1
return
}
go func() {
go io.Copy(tr.StdoutBuf, stdout)
go io.Copy(tr.StderrBuf, stderr)
tr.Cmd.Wait()
tr.StdoutBuf.Close()
tr.StderrBuf.Close()
log.Trace("STDOUT: %s", tr.StdoutBuf.String())
log.Trace("STDERR: %s", tr.StderrBuf.String())
ps := tr.Cmd.ProcessState
sy := ps.Sys().(syscall.WaitStatus)
ev := &Event{time.Now(), fmt.Sprintf("Process %d exited with status %d", ps.Pid(), sy.ExitStatus())}
log.Info(ev.Message)
tr.Events = append(tr.Events, ev)
log.Info(ps.String())
tr.Stopped = time.Now()
exitCh <- 1
}()
}
开发者ID:francoishill,项目名称:websysd,代码行数:87,代码来源:task.go
示例20: EventStream
func (r *Response) EventStream() chan []byte {
c := make(chan []byte)
r.IsEventStream = true
r.Headers.Add("Content-Type", "text/event-stream")
r.Headers.Add("Cache-Control", "no-cache")
r.Headers.Add("Connection", "keep-alive")
//r.Write([]byte("\n\n"))
r.Send()
hj, ok := r.writer.(nethttp.Hijacker)
if !ok {
log.Warn("Connection unsuitable for hijack")
return nil
}
conn, bufrw, err := hj.Hijack()
if err != nil {
log.Warn("Connection hijack failed")
return nil
}
r.esBufrw = bufrw
r.esConn = conn
go func() {
for b := range c {
if len(b) == 0 {
log.Trace("Event stream ended")
r.esConn.Close()
break
}
lines := strings.Split(string(b), "\n")
data := ""
for _, l := range lines {
data += "data: " + l + "\n"
}
data += "\n"
sz := len(data) + 1
log.Info("Event stream message is %d bytes", sz)
size := fmt.Sprintf("%X", sz)
r.esBufrw.Write([]byte(size + "\r\n"))
lines = strings.Split(data, "\n")
for _, ln := range lines {
r.esBufrw.Write([]byte(ln + "\n"))
}
_, err := r.esBufrw.Write([]byte("\r\n"))
if err != nil {
log.Error("Error writing to connection: %s\n", err)
r.esConn.Close()
break
}
err = r.esBufrw.Flush()
if err != nil {
log.Error("Error flushing buffer: %s\n", err)
r.esConn.Close()
break
}
}
}()
return c
}
开发者ID:sogko,项目名称:gotcha,代码行数:66,代码来源:response.go
注:本文中的github.com/ian-kent/go-log/log.Info函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论