本文整理汇总了Golang中github.com/indyjo/bitwrk-common/bitwrk.Logger类的典型用法代码示例。如果您正苦于以下问题:Golang Logger类的具体用法?Golang Logger怎么用?Golang Logger使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Logger类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: requestMissingChunks
func (a *BuyActivity) requestMissingChunks(log bitwrk.Logger, client *http.Client) (io.ReadCloser, error) {
// Send chunk list of work to client
pipeIn, pipeOut := io.Pipe()
defer pipeIn.Close()
mwriter := multipart.NewWriter(pipeOut)
// Write chunk hashes into pipe for HTTP request
go func() {
defer pipeOut.Close()
if err := a.encodeChunkedFirstTransmission(log, mwriter); err != nil {
pipeOut.CloseWithError(err)
return
}
if err := mwriter.Close(); err != nil {
pipeOut.CloseWithError(err)
return
}
log.Printf("Work chunk hashes transmitted successfully.")
}()
if r, err := a.postToSeller(pipeIn, mwriter.FormDataContentType(), false, client); err != nil {
return nil, fmt.Errorf("Error sending work chunk hashes to seller: %v", err)
} else {
return r, nil
}
}
示例2: sendMissingChunksAndReturnResult
func (a *BuyActivity) sendMissingChunksAndReturnResult(log bitwrk.Logger, client *http.Client, wishList []byte) (io.ReadCloser, error) {
// Send data of missing chunks to seller
pipeIn, pipeOut := io.Pipe()
defer pipeIn.Close()
mwriter := multipart.NewWriter(pipeOut)
// Write work chunks into pipe for HTTP request
go func() {
defer pipeOut.Close()
if part, err := mwriter.CreateFormFile("chunkdata", "chunkdata.bin"); err != nil {
pipeOut.CloseWithError(err)
return
} else if err := cafs.WriteRequestedChunks(a.workFile, wishList, part); err != nil {
pipeOut.CloseWithError(err)
return
}
if err := mwriter.Close(); err != nil {
pipeOut.CloseWithError(err)
return
}
log.Printf("Missing chunk data transmitted successfully.")
}()
if r, err := a.postToSeller(pipeIn, mwriter.FormDataContentType(), client); err != nil {
return nil, fmt.Errorf("Error sending work chunk data to seller: %v", err)
} else {
return r, nil
}
}
示例3: updateTransaction
func (t *Trade) updateTransaction(log bitwrk.Logger) error {
attemptsLeft := 3
for attemptsLeft > 0 {
attemptsLeft--
if tx, etag, err := FetchTx(t.txId, ""); err != nil {
log.Printf("Error updating transaction: %v (attempts left: %d)", err, attemptsLeft)
if attemptsLeft > 0 {
time.Sleep(5 * time.Second)
} else {
return err
}
} else {
expired := false
func() {
t.condition.L.Lock()
defer t.condition.L.Unlock()
if etag != t.txETag {
t.tx = tx
t.txETag = etag
expired = t.tx.State != bitwrk.StateActive
t.condition.Broadcast()
log.Printf("Tx change detected: phase=%v, expired=%v", t.tx.Phase, expired)
}
}()
if expired {
break
}
}
}
return nil
}
示例4: PerformSell
// Manages the complete lifecycle of a sell
func (a *SellActivity) PerformSell(log bitwrk.Logger, receiveManager *ReceiveManager, interrupt <-chan bool) error {
defer log.Println("Sell finished")
err := a.doPerformSell(log, receiveManager, interrupt)
if err != nil {
a.lastError = err
}
a.alive = false
return err
}
示例5: sendMissingChunksAndReturnResult
func (a *BuyActivity) sendMissingChunksAndReturnResult(log bitwrk.Logger, client *http.Client, wishList []byte, compressed bool) (io.ReadCloser, error) {
// Send data of missing chunks to seller
pipeIn, pipeOut := io.Pipe()
defer pipeIn.Close()
// Setup compression layer with dummy impl in case of uncompressed transmisison
var compressor io.Writer
var closeCompressor func() error
if compressed {
c := gzip.NewWriter(pipeOut)
compressor = c
closeCompressor = c.Close
} else {
compressor = pipeOut
closeCompressor = func() error { return nil }
}
mwriter := multipart.NewWriter(compressor)
// Communicate status back
progressCallback := func(bytesToTransfer, bytesTransferred uint64) {
a.execSync(func() {
a.bytesToTransfer = bytesToTransfer
a.bytesTransferred = bytesTransferred
})
}
// Write work chunks into pipe for HTTP request
go func() {
defer pipeOut.Close()
if part, err := mwriter.CreateFormFile("chunkdata", "chunkdata.bin"); err != nil {
pipeOut.CloseWithError(err)
return
} else if err := cafs.WriteRequestedChunks(a.workFile, wishList, part, progressCallback); err != nil {
pipeOut.CloseWithError(err)
return
}
if err := mwriter.Close(); err != nil {
pipeOut.CloseWithError(err)
return
}
if err := closeCompressor(); err != nil {
pipeOut.CloseWithError(err)
return
}
log.Printf("Missing chunk data transmitted successfully.")
}()
if r, err := a.postToSeller(pipeIn, mwriter.FormDataContentType(), compressed, client); err != nil {
return nil, fmt.Errorf("Error sending work chunk data to seller: %v", err)
} else {
return r, nil
}
}
示例6: transmitWorkChunked
func (a *BuyActivity) transmitWorkChunked(log bitwrk.Logger, client *http.Client, compressed bool) (io.ReadCloser, error) {
if r, err := a.requestMissingChunks(log.New("request missing chunks"), client); err != nil {
return nil, err
} else {
defer r.Close()
numChunks := a.workFile.NumChunks()
if numChunks > MaxNumberOfChunksInWorkFile {
return nil, fmt.Errorf("Work file too big: %d chunks (only %d allowed).", numChunks, MaxNumberOfChunksInWorkFile)
}
wishList := make([]byte, int(numChunks+7)/8)
if _, err := io.ReadFull(r, wishList); err != nil {
return nil, fmt.Errorf("Error decoding list of missing chunks: %v", err)
}
return a.sendMissingChunksAndReturnResult(log.New("send work chunk data"), client, wishList, compressed)
}
}
示例7: encodeChunkedFirstTransmission
func (a *BuyActivity) encodeChunkedFirstTransmission(log bitwrk.Logger, mwriter *multipart.Writer) (err error) {
part, err := mwriter.CreateFormFile("a32chunks", "a32chunks.bin")
if err != nil {
return
}
log.Printf("Sending work chunk hashes to seller [%v].", *a.tx.WorkerURL)
err = cafs.WriteChunkHashes(a.workFile, part)
if err != nil {
return
}
log.Printf("Sending buyer's secret to seller.")
err = mwriter.WriteField("buyersecret", a.buyerSecret.String())
if err != nil {
return
}
return mwriter.Close()
}
示例8: watchdog
// Closes resources upon exit of a function or when some condition no longer holds
// Arguments:
// - exitChan: Signals the watchdog to exit
// - closerChan: Signals the watchdog to add an io.Closer to the list of closers
// - f: Defines the OK condition. When false, all current closers are closed
func (t *Trade) watchdog(log bitwrk.Logger, exitChan <-chan bool, closerChan <-chan io.Closer, f func() bool) {
closers := make([]io.Closer, 0, 1)
for {
select {
case closer := <-closerChan:
closers = append(closers, closer)
case <-exitChan:
// Exit from watchdog if surrounding function has terminated
log.Print("Watchdog exiting by request")
return
default:
}
// Check if condition still holds
t.condition.L.Lock()
ok := f()
t.condition.L.Unlock()
if !ok {
log.Printf("Watchdog: closing %v channels", len(closers))
for _, c := range closers {
err := c.Close()
if err != nil {
log.Printf("Error closing channel: %v", err)
}
}
closers = closers[:0] // clear list of current closers
}
time.Sleep(250 * time.Millisecond)
}
}
示例9: offer
func (s *WorkerState) offer(log bitwrk.Logger) {
defer log.Printf("Stopped offering")
s.cond.L.Lock()
defer s.cond.L.Unlock()
interrupt := make(chan bool, 1)
for {
// Interrupt if unregistered, stop iterating
if s.Unregistered {
log.Printf("No longer registered")
interrupt <- true
break
}
if s.Blockers == 0 {
s.LastError = ""
if sell, err := s.m.activityManager.NewSell(s); err != nil {
s.LastError = fmt.Sprintf("Error creating sell: %v", err)
log.Println(s.LastError)
s.blockFor(20 * time.Second)
} else {
s.Blockers++
go s.executeSell(log, sell, interrupt)
}
}
s.cond.Wait()
}
}
示例10: awaitTransaction
func (t *Trade) awaitTransaction(log bitwrk.Logger) error {
lastETag := ""
for count := 1; ; count++ {
if bid, etag, err := FetchBid(t.bidId, lastETag); err != nil {
return fmt.Errorf("Error in FetchBid awaiting transaction: %v", err)
} else if bid != nil {
log.Printf("Bid: %#v ETag: %v lastETag: %v", *bid, etag, lastETag)
t.bid = bid
lastETag = etag
if t.bid.State == bitwrk.Matched {
t.txId = *t.bid.Transaction
break
} else if t.bid.State == bitwrk.Expired {
return ErrBidExpired
}
}
// Sleep for gradually longer durations
time.Sleep(time.Duration(count) * 500 * time.Millisecond)
}
return nil
}
示例11: NewWorkReceiver
func NewWorkReceiver(log bitwrk.Logger,
info string,
receiveManager *ReceiveManager,
storage cafs.FileStorage,
key bitwrk.Tkey,
handler WorkHandler) WorkReceiver {
result := &endpointReceiver{
endpoint: receiveManager.NewEndpoint(info),
storage: storage,
log: log,
handler: handler,
info: info,
encResultKey: key,
}
result.endpoint.SetHandler(func(w http.ResponseWriter, r *http.Request) {
if err := result.handleRequest(w, r); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
log.Printf("Error in request: %v", err)
result.Dispose()
}
})
return result
}
示例12: NewWorkReceiver
func NewWorkReceiver(log bitwrk.Logger,
info string,
receiveManager *ReceiveManager,
storage cafs.FileStorage,
key bitwrk.Tkey,
handler WorkHandler) WorkReceiver {
result := &endpointReceiver{
endpoint: receiveManager.NewEndpoint(info),
storage: storage,
log: log,
handler: handler,
info: info,
encResultKey: key,
}
handlerFunc := func(w http.ResponseWriter, r *http.Request) {
if err := result.handleRequest(w, r); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
log.Printf("Error in request: %v", err)
result.doDispose(fmt.Errorf("Error handling request from %v: %v", r.RemoteAddr, err))
}
}
result.endpoint.SetHandler(withCompression(handlerFunc))
return result
}
示例13: pollTransaction
// Polls the transaction state in a separate go-routine. Returns on abort signal, or
// when the polled transaction expires.
func (t *Trade) pollTransaction(log bitwrk.Logger, abort <-chan bool) {
defer func() {
log.Printf("Transaction polling has stopped")
}()
for count := 1; ; count++ {
select {
case <-abort:
log.Printf("Aborting transaction polling while transaction active")
return
default:
}
if tx, etag, err := FetchTx(t.txId, ""); err != nil {
log.Printf("Error polling transaction: %v", err)
} else if etag != t.txETag {
t.condition.L.Lock()
t.tx = tx
t.txETag = etag
expired := t.tx.State != bitwrk.StateActive
t.condition.Broadcast()
t.condition.L.Unlock()
log.Printf("Tx change detected: phase=%v, expired=%v", t.tx.Phase, expired)
if expired {
break
}
}
// Sleep for gradually longer durations
time.Sleep(time.Duration(count) * 500 * time.Millisecond)
}
log.Printf("Transaction has expired.")
// This is necessary so that the surrounding function call doesn't deadlock
<-abort
}
示例14: beginTrade
func (a *Trade) beginTrade(log bitwrk.Logger, interrupt <-chan bool) error {
// wait for grant or reject
log.Println("Waiting for permission")
// Get a permission for the sell
if err := a.awaitPermission(interrupt); err != nil {
return fmt.Errorf("Error awaiting permission: %v", err)
}
log.Printf("Got permission. Price: %v", a.price)
// Prevent too many unmatched bids on server
key := fmt.Sprintf("%v-%v", a.bidType, a.article)
if err := a.manager.checkoutToken(key, NumUnmatchedBids, interrupt); err != nil {
return err
}
defer a.manager.returnToken(key)
if err := a.awaitBid(); err != nil {
return fmt.Errorf("Error awaiting bid: %v", err)
}
log.Printf("Got bid id: %v", a.bidId)
if err := a.awaitTransaction(log); err != nil {
return fmt.Errorf("Error awaiting transaction: %v", err)
}
log.Printf("Got transaction id: %v", a.txId)
if tx, etag, err := FetchTx(a.txId, ""); err != nil {
return err
} else {
a.tx = tx
a.txETag = etag
}
return nil
}
示例15: executeSell
func (s *WorkerState) executeSell(log bitwrk.Logger, sell *SellActivity, interrupt <-chan bool) {
defer func() {
s.cond.L.Lock()
s.Blockers--
s.cond.Broadcast()
s.cond.L.Unlock()
}()
defer sell.Dispose()
if err := sell.PerformSell(log.Newf("Sell #%v", sell.GetKey()), s.m.receiveManager, interrupt); err != nil {
s.LastError = fmt.Sprintf("Error performing sell (delaying next sell by 20s): %v", err)
log.Println(s.LastError)
s.cond.L.Lock()
s.blockFor(20 * time.Second)
s.cond.L.Unlock()
} else {
log.Printf("Returned from PerformSell successfully")
}
}