2016-03-27 9 views
2

Ich versuche, die Methode patchTraces zu verwenden, um Ablaufverfolgungsinformationen an Google CloudTrace zu senden. Die Patch-Anfrage, die ich mache, gibt eine undurchsichtige Fehlermeldung zurück. Irgendeine Idee, was ich falsch mache?Das Hinzufügen einer neuen Ablaufverfolgung schlägt fehl

Go Code

package main 

import (
    "io/ioutil" 
    "log" 
    "os" 
    "time" 

    "github.com/twinj/uuid" 
    "golang.org/x/oauth2" 
    goog "golang.org/x/oauth2/google" 
    cloudtrace "google.golang.org/api/cloudtrace/v1" 
) 

func run() error { 
    blob, err := ioutil.ReadFile("jwt.json") 
    if err != nil { 
     return err 
    } 
    conf, err := goog.JWTConfigFromJSON(blob, cloudtrace.CloudPlatformScope) 
    if err != nil { 
     return err 
    } 

    client := conf.Client(oauth2.NoContext) 

    srv, err := cloudtrace.New(client) 
    if err != nil { 
     return err 
    } 

    tracer := cloudtrace.NewProjectsService(srv) 
    now := time.Now() 
    format := "2006-01-02T15:04:05.999999999Z" 

    call := tracer.PatchTraces("foo-1262", &cloudtrace.Traces{ 
     Traces: []*cloudtrace.Trace{ 
      { 
       TraceId: uuid.NewV4().String(), 
       ProjectId: "foo-1262", 
       Spans: []*cloudtrace.TraceSpan{ 
        { 
         StartTime: now.Format(format), 
         EndTime: now.Add(5 * time.Second).Format(format), 
         Kind:  "RPC_SERVER", 
         Name:  "bar", 
         SpanId: 100, 
        }, 
       }, 
      }, 
     }, 
    }) 

    _, err = call.Do() 
    return err 
} 

func main() { 
    if err := run(); err != nil { 
     log.Fatal(err) 
    } 
} 

Hier ist die Anforderung, die

https://cloudtrace.googleapis.com/v1/projects/foo-1262/traces?alt=json 
{ 
    "traces": [{ 
     "projectId": "foo-1262", 
     "spans": [{ 
      "endTime": "2016-03-26T17:23:19.705253417Z", 
      "kind": "RPC_SERVER", 
      "name": "foo", 
      "spanId": "100", 
      "startTime": "2016-03-26T17:23:14.705253417Z" 
     }], 
     "traceId": "4d86ec85-419d-40cf-ae95-d49c2d066cd6" 
    }] 
} 

Antwort

{ 
    "error": { 
     "code": 400, 
     "message": "Request contains an invalid argument.", 
     "errors": [{ 
      "message": "Request contains an invalid argument.", 
      "domain": "global", 
      "reason": "badRequest" 
     }], 
     "status": "INVALID_ARGUMENT" 
    } 
} 

Alles korrekt aussieht geschickt wird, aber ich bin immer wieder eine unkritische Fehlermeldung. Bitte helfen Sie!

Antwort

0

Meine Trace-ID-Generierung war falsch.

package main 

import (
    "io/ioutil" 
    "log" 
    "os" 
    "time" 
    "encoding/hex" 
    "rand" 

    "golang.org/x/oauth2" 
    goog "golang.org/x/oauth2/google" 
    cloudtrace "google.golang.org/api/cloudtrace/v1" 
) 

func run() error { 
    blob, err := ioutil.ReadFile("jwt.json") 
    if err != nil { 
     return err 
    } 
    conf, err := goog.JWTConfigFromJSON(blob, cloudtrace.CloudPlatformScope) 
    if err != nil { 
     return err 
    } 

    client := conf.Client(oauth2.NoContext) 

    srv, err := cloudtrace.New(client) 
    if err != nil { 
     return err 
    } 

    tracer := cloudtrace.NewProjectsService(srv) 
    now := time.Now() 
    format := "2006-01-02T15:04:05.999999999Z" 

    p := make([]byte, 16) 
    rand.Read(p) 

    call := tracer.PatchTraces("foo-1262", &cloudtrace.Traces{ 
     Traces: []*cloudtrace.Trace{ 
      { 
       TraceId: hex.EncodeToString(p), 
       ProjectId: "foo-1262", 
       Spans: []*cloudtrace.TraceSpan{ 
        { 
         StartTime: now.Format(format), 
         EndTime: now.Add(5 * time.Second).Format(format), 
         Kind:  "RPC_SERVER", 
         Name:  "bar", 
         SpanId: 100, 
        }, 
       }, 
      }, 
     }, 
    }) 

    _, err = call.Do() 
    return err 
} 

func main() { 
    if err := run(); err != nil { 
     log.Fatal(err) 
    } 
} 
+0

sollten Sie dies nicht als beantwortet markieren und/oder aktualisieren? – tmc