本文整理汇总了Golang中github.com/snapcore/snapd/logger.Debugf函数的典型用法代码示例。如果您正苦于以下问题:Golang Debugf函数的具体用法?Golang Debugf怎么用?Golang Debugf使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Debugf函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: downloadAndApplyDelta
// downloadAndApplyDelta downloads and then applies the delta to the current snap.
func (s *Store) downloadAndApplyDelta(name, targetPath string, downloadInfo *snap.DownloadInfo, pbar progress.Meter, user *auth.UserState) error {
deltaInfo := &downloadInfo.Deltas[0]
deltaPath := fmt.Sprintf("%s.%s-%d-to-%d.partial", targetPath, deltaInfo.Format, deltaInfo.FromRevision, deltaInfo.ToRevision)
deltaName := filepath.Base(deltaPath)
w, err := os.Create(deltaPath)
if err != nil {
return err
}
defer func() {
if cerr := w.Close(); cerr != nil && err == nil {
err = cerr
}
os.Remove(deltaPath)
}()
err = s.downloadDelta(deltaName, downloadInfo, w, pbar, user)
if err != nil {
return err
}
logger.Debugf("Successfully downloaded delta for %q at %s", name, deltaPath)
if err := applyDelta(name, deltaPath, deltaInfo, targetPath, downloadInfo.Sha3_384); err != nil {
return err
}
logger.Debugf("Successfully applied delta for %q at %s, saving %d bytes.", name, deltaPath, downloadInfo.Size-deltaInfo.Size)
return nil
}
示例2: authenticateUser
// authenticateUser will add the store expected Macaroon Authorization header for user
func authenticateUser(r *http.Request, user *auth.UserState) {
var buf bytes.Buffer
fmt.Fprintf(&buf, `Macaroon root="%s"`, user.StoreMacaroon)
// deserialize root macaroon (we need its signature to do the discharge binding)
root, err := auth.MacaroonDeserialize(user.StoreMacaroon)
if err != nil {
logger.Debugf("cannot deserialize root macaroon: %v", err)
return
}
for _, d := range user.StoreDischarges {
// prepare discharge for request
discharge, err := auth.MacaroonDeserialize(d)
if err != nil {
logger.Debugf("cannot deserialize discharge macaroon: %v", err)
return
}
discharge.Bind(root.Signature())
serializedDischarge, err := auth.MacaroonSerialize(discharge)
if err != nil {
logger.Debugf("cannot re-serialize discharge macaroon: %v", err)
return
}
fmt.Fprintf(&buf, `, discharge="%s"`, serializedDischarge)
}
r.Header.Set("Authorization", buf.String())
}
示例3: retryRequest
// retryRequest calls doRequest and decodes the response in a retry loop.
func (s *Store) retryRequest(ctx context.Context, client *http.Client, reqOptions *requestOptions, user *auth.UserState, decode func(ok bool, resp *http.Response) error) (resp *http.Response, err error) {
var attempt *retry.Attempt
startTime := time.Now()
for attempt = retry.Start(defaultRetryStrategy, nil); attempt.Next(); {
if attempt.Count() > 1 {
delta := time.Since(startTime) / time.Millisecond
logger.Debugf("Retyring %s, attempt %d, delta time=%v ms", reqOptions.URL, attempt.Count(), delta)
}
if cancelled(ctx) {
return nil, ctx.Err()
}
resp, err = s.doRequest(ctx, client, reqOptions, user)
if err != nil {
if shouldRetryError(attempt, err) {
continue
}
break
}
if shouldRetryHttpResponse(attempt, resp) {
resp.Body.Close()
continue
} else {
ok := (resp.StatusCode == http.StatusOK || resp.StatusCode == http.StatusCreated)
// always decode on success; decode failures only if body is not empty
if !ok && resp.ContentLength == 0 {
resp.Body.Close()
break
}
err = decode(ok, resp)
resp.Body.Close()
if err != nil {
if shouldRetryError(attempt, err) {
continue
} else {
return nil, err
}
}
}
// break out from retry loop
break
}
if attempt.Count() > 1 {
var status string
delta := time.Since(startTime) / time.Millisecond
if err != nil {
status = err.Error()
} else if resp != nil {
status = fmt.Sprintf("%d", resp.StatusCode)
}
logger.Debugf("The retry loop for %s finished after %d retries, delta time=%v ms, status: %s", reqOptions.URL, attempt.Count(), delta, status)
}
return resp, err
}
示例4: ExecInCoreSnap
// ExecInCoreSnap makes sure you're executing the binary that ships in
// the core snap.
func ExecInCoreSnap() {
if !release.OnClassic {
// you're already the real deal, natch
return
}
if os.Getenv(key) != "1" {
return
}
exe, err := os.Readlink("/proc/self/exe")
if err != nil {
return
}
full := filepath.Join(newCore, exe)
if !osutil.FileExists(full) {
if rev, err := os.Readlink(oldCore); err != nil {
return
} else if revno, err := strconv.Atoi(rev); err != nil || revno < minOldRevno {
return
}
full = filepath.Join(oldCore, exe)
if !osutil.FileExists(full) {
return
}
}
logger.Debugf("restarting into %q", full)
env := append(os.Environ(), key+"=0")
panic(syscall.Exec(full, os.Args, env))
}
示例5: Init
// Init sets up the Daemon's internal workings.
// Don't call more than once.
func (d *Daemon) Init() error {
t0 := time.Now()
listeners, err := activation.Listeners(false)
if err != nil {
return err
}
listenerMap := make(map[string]net.Listener)
for _, listener := range listeners {
listenerMap[listener.Addr().String()] = listener
}
// The SnapdSocket is required-- without it, die.
if listener, ok := listenerMap[dirs.SnapdSocket]; ok {
d.snapdListener = &ucrednetListener{listener}
} else {
return fmt.Errorf("daemon is missing the listener for %s", dirs.SnapdSocket)
}
// Note that the SnapSocket listener does not use ucrednet. We use the lack
// of remote information as an indication that the request originated with
// this socket. This listener may also be nil if that socket wasn't among
// the listeners, so check it before using it.
d.snapListener = listenerMap[dirs.SnapSocket]
d.addRoutes()
logger.Debugf("init done in %s", time.Now().Sub(t0))
return nil
}
示例6: clean
func (r *TaskRunner) clean(t *Task) {
if !t.Change().IsReady() {
// Whole Change is not ready so don't run cleanups yet.
return
}
cleanup, ok := r.cleanups[t.Kind()]
if !ok {
t.SetClean()
return
}
tomb := &tomb.Tomb{}
r.tombs[t.ID()] = tomb
tomb.Go(func() error {
tomb.Kill(cleanup(t, tomb))
// Locks must be acquired in the same order everywhere.
r.mu.Lock()
defer r.mu.Unlock()
r.state.Lock()
defer r.state.Unlock()
delete(r.tombs, t.ID())
if tomb.Err() != nil {
logger.Debugf("Cleaning task %s: %s", t.ID(), tomb.Err())
} else {
t.SetClean()
}
return nil
})
}
示例7: RoundTrip
// RoundTrip is from the http.RoundTripper interface.
func (tr *LoggedTransport) RoundTrip(req *http.Request) (*http.Response, error) {
flags := tr.getFlags()
if flags.debugRequest() {
buf, _ := httputil.DumpRequestOut(req, tr.body && flags.debugBody())
logger.Debugf("> %q", buf)
}
rsp, err := tr.Transport.RoundTrip(req)
if err == nil && flags.debugResponse() {
buf, _ := httputil.DumpResponse(rsp, tr.body && flags.debugBody())
logger.Debugf("< %q", buf)
}
return rsp, err
}
示例8: newRequest
// build a new http.Request with headers for the store
func (s *Store) newRequest(reqOptions *requestOptions, user *auth.UserState) (*http.Request, error) {
var body io.Reader
if reqOptions.Data != nil {
body = bytes.NewBuffer(reqOptions.Data)
}
req, err := http.NewRequest(reqOptions.Method, reqOptions.URL.String(), body)
if err != nil {
return nil, err
}
if s.authContext != nil {
device, err := s.authContext.Device()
if err != nil {
return nil, err
}
// we don't have a session yet but have a serial, try
// to get a session
if device.SessionMacaroon == "" && device.Serial != "" {
err = s.refreshDeviceSession(device)
if err == auth.ErrNoSerial {
// missing serial assertion, log and continue without device authentication
logger.Debugf("cannot set device session: %v", err)
}
if err != nil && err != auth.ErrNoSerial {
return nil, err
}
}
authenticateDevice(req, device)
}
// only set user authentication if user logged in to the store
if hasStoreAuth(user) {
authenticateUser(req, user)
}
req.Header.Set("User-Agent", userAgent)
req.Header.Set("Accept", reqOptions.Accept)
req.Header.Set("X-Ubuntu-Architecture", s.architecture)
req.Header.Set("X-Ubuntu-Series", s.series)
req.Header.Set("X-Ubuntu-Classic", strconv.FormatBool(release.OnClassic))
req.Header.Set("X-Ubuntu-Wire-Protocol", UbuntuCoreWireProtocol)
if reqOptions.ContentType != "" {
req.Header.Set("Content-Type", reqOptions.ContentType)
}
for header, value := range reqOptions.ExtraHeaders {
req.Header.Set(header, value)
}
s.setStoreID(req)
return req, nil
}
示例9: addLog
func (t *Task) addLog(kind, format string, args []interface{}) {
if len(t.log) > 9 {
copy(t.log, t.log[len(t.log)-9:])
t.log = t.log[:9]
}
tstr := timeNow().Format(time.RFC3339)
msg := fmt.Sprintf(tstr+" "+kind+" "+format, args...)
t.log = append(t.log, msg)
logger.Debugf(msg)
}
示例10: shouldSearchStore
func shouldSearchStore(r *http.Request) bool {
// we should jump to the old behaviour iff q is given, or if
// sources is given and either empty or contains the word
// 'store'. Otherwise, local results only.
query := r.URL.Query()
if _, ok := query["q"]; ok {
logger.Debugf("use of obsolete \"q\" parameter: %q", r.URL)
return true
}
if src, ok := query["sources"]; ok {
logger.Debugf("use of obsolete \"sources\" parameter: %q", r.URL)
if len(src) == 0 || strings.Contains(src[0], "store") {
return true
}
}
return false
}
示例11: main
func main() {
if err := logger.SimpleSetup(); err != nil {
fmt.Fprintf(os.Stderr, "failed to activate logging: %v\n", err)
os.Exit(1)
}
logger.Debugf("fakestore starting")
if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
}
示例12: logit
func logit(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ww := &wrappedWriter{w: w}
t0 := time.Now()
handler.ServeHTTP(ww, r)
t := time.Now().Sub(t0)
url := r.URL.String()
if !strings.Contains(url, "/changes/") {
logger.Debugf("%s %s %s %s %d", r.RemoteAddr, r.Method, r.URL, t, ww.s)
}
})
}
示例13: updateDesktopDatabase
func updateDesktopDatabase(desktopFiles []string) error {
if len(desktopFiles) == 0 {
return nil
}
if _, err := exec.LookPath("update-desktop-database"); err == nil {
if output, err := exec.Command("update-desktop-database", dirs.SnapDesktopFilesDir).CombinedOutput(); err != nil {
return fmt.Errorf("cannot update-desktop-database %q: %s", output, err)
}
logger.Debugf("update-desktop-database successful")
}
return nil
}
示例14: addRoutes
func (d *Daemon) addRoutes() {
d.router = mux.NewRouter()
for _, c := range api {
c.d = d
logger.Debugf("adding %s", c.Path)
d.router.Handle(c.Path, c).Name(c.Path)
}
// also maybe add a /favicon.ico handler...
d.router.NotFoundHandler = NotFound("not found")
}
示例15: downloadAndApplyDelta
// downloadAndApplyDelta downloads and then applies the delta to the current snap.
func (s *Store) downloadAndApplyDelta(name string, downloadInfo *snap.DownloadInfo, pbar progress.Meter, user *auth.UserState) (path string, err error) {
deltaInfo := &downloadInfo.Deltas[0]
workingDir, err := ioutil.TempDir(dirs.SnapPartialBlobDir, "deltas-"+name)
if err != nil {
return "", err
}
defer os.RemoveAll(workingDir)
deltaPath, err := s.downloadDelta(name, workingDir, downloadInfo, pbar, user)
if err != nil {
return "", err
}
logger.Debugf("Successfully downloaded delta for %q at %s", name, deltaPath)
snapPath, err := applyDelta(name, deltaPath, deltaInfo)
if err != nil {
return "", err
}
logger.Debugf("Successfully applied delta for %q at %s. Returning %s instead of full download and saving %d bytes.", name, deltaPath, snapPath, downloadInfo.Size-deltaInfo.Size)
return snapPath, nil
}