Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package output | |
| 6 | |
| 7 import ( | |
| 8 "fmt" | |
| 9 | |
| 10 "github.com/luci/luci-go/common/logdog/protocol" | |
| 11 ) | |
| 12 | |
| 13 // Output is a sink endpoint for groups of messages. | |
| 14 // | |
| 15 // An Output's methods must be goroutine-safe. | |
| 16 // | |
| 17 // Note that there is no guarantee that any of the bundles passed through an | |
| 18 // Output are ordered. | |
| 19 type Output interface { | |
| 20 // SendBundle sends a constructed ButlerLogBundle through the Output. | |
| 21 // | |
| 22 // If an error is returned, it indicates a failure to send the bundle. | |
| 23 // If there is a data error or a message type is not supported by the | |
| 24 // Output, it should log the error and return nil. | |
| 25 SendBundle(*protocol.ButlerLogBundle) error | |
| 26 | |
| 27 // MaxSize returns the maximum number of bytes that this Output can proc ess | |
| 28 // with a single send. A return value <=0 indicates that there si no fix ed | |
| 29 // maximum size for this Output. | |
| 30 // | |
| 31 // Since it is impossible for callers to know the actual size of the mes sage | |
| 32 // that is being submitted, and since message batching may cluster acros s | |
| 33 // size boundaries, this should be a conservative estimate. | |
| 34 MaxSize() int | |
| 35 | |
| 36 // Collect current Output stats. | |
| 37 Stats() Stats | |
| 38 | |
| 39 // Close closes the Output, blocking until any buffered actions are flus hed. | |
| 40 Close() | |
| 41 } | |
| 42 | |
| 43 // Stats is an interface to query Output statistics. | |
| 44 // | |
| 45 // An Output's ability to keep statistics varies with its implementation | |
| 46 // details. Currently, Stats are for debugging/information purposes only. | |
| 47 type Stats interface { | |
| 48 fmt.Stringer | |
| 49 | |
| 50 // SentBytes returns the number of bytes | |
| 51 SentBytes() int | |
| 52 // SentMessages returns the number of successfully transmitted messages. | |
| 53 SentMessages() int | |
| 54 // DiscardedMessages returns the number of discarded messages. | |
| 55 DiscardedMessages() int | |
| 56 // Errors returns the number of errors encountered during operation. | |
| 57 Errors() int | |
| 58 } | |
| 59 | |
| 60 // StatsBase is a simple implementation of the Stats interface. | |
| 61 type StatsBase struct { | |
| 62 F struct { | |
| 63 SentBytes int // The number of bytes sent. | |
| 64 SentMessages int // The number of messages sent. | |
| 65 DiscardedMessages int // The number of messages that have been d iscarded. | |
| 66 Errors int // The number of errors encountered. | |
| 67 } | |
| 68 } | |
| 69 | |
| 70 var _ Stats = (*StatsBase)(nil) | |
| 71 | |
| 72 func (s *StatsBase) String() string { | |
| 73 return fmt.Sprintf("%+v", s.F) | |
| 74 } | |
| 75 | |
| 76 // SentBytes implements Stas. | |
| 77 func (s *StatsBase) SentBytes() int { | |
| 78 return s.F.SentBytes | |
| 79 } | |
| 80 | |
| 81 // SentMessages implements Stas. | |
| 82 func (s *StatsBase) SentMessages() int { | |
| 83 return s.F.SentMessages | |
| 84 } | |
| 85 | |
| 86 // DiscardedMessages implements Stas. | |
| 87 func (s *StatsBase) DiscardedMessages() int { | |
| 88 return s.F.DiscardedMessages | |
| 89 } | |
| 90 | |
| 91 // Errors implements Stas. | |
|
estaab
2015/11/19 23:57:24
Stats (and all of the copy pastes above)
dnj
2015/11/20 01:55:12
Done.
| |
| 92 func (s *StatsBase) Errors() int { | |
| 93 return s.F.Errors | |
| 94 } | |
| 95 | |
| 96 // Merge merges the values from one Stats block into another. | |
| 97 func (s *StatsBase) Merge(o Stats) { | |
| 98 s.F.SentBytes += o.SentBytes() | |
| 99 s.F.SentMessages += o.SentMessages() | |
| 100 s.F.DiscardedMessages += o.DiscardedMessages() | |
| 101 s.F.Errors += o.Errors() | |
| 102 } | |
| OLD | NEW |