Created
June 30, 2021 14:37
-
-
Save gildas/7134a5a3f829b044b5a769892fc21eee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"time" | |
"github.com/gildas/go-errors" | |
"github.com/gildas/go-logger" | |
) | |
func fastjob(result chan interface{}) { | |
time.Sleep(50 * time.Millisecond) | |
result <- "Job Done" | |
} | |
func slowjob(result chan interface{}) { | |
time.Sleep(10 * time.Second) | |
result <- "Job Done" | |
} | |
func jobRunner(ctx context.Context, job func(chan interface{})) error { | |
log := logger.Must(logger.FromContext(ctx)) | |
reschan := make(chan interface{}) | |
// Run the job | |
go job(reschan) | |
// Wait for results | |
start := time.Now() | |
for { | |
select { | |
case result := <-reschan: | |
log.Infof("Success results: %+v in %s", result, time.Since(start)) | |
return nil | |
case <-ctx.Done(): | |
log.Errorf("Timeout encountered after %s", time.Since(start)) | |
return errors.HTTPStatusRequestTimeout.WithStack() | |
} | |
} | |
} | |
func main() { | |
log := logger.Create("CONTEXT", &logger.StdoutStream{Unbuffered: true}) | |
logctx := log.ToContext(context.Background()) | |
log.Infof("Running a fast job") | |
log1 := log.Record("job", "fastjob") | |
ctx1, cancel1 := context.WithTimeout(logctx, 1 * time.Second) | |
defer cancel1() | |
if err := jobRunner(ctx1, fastjob); err != nil { | |
log1.Errorf("Error was encountered", err) | |
} | |
log.Infof("Running a slow job") | |
log2 := log.Record("job", "slowjob") | |
ctx2, cancel2 := context.WithTimeout(logctx, 1 * time.Second) | |
defer cancel2() | |
if err := jobRunner(ctx2, slowjob); err != nil { | |
log2.Errorf("Error was encountered", err) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Logger output: