wp
This commit is contained in:
161
client/client.go
161
client/client.go
@@ -149,26 +149,32 @@ func (s *Connection) DeleteMetric(metricID uint32) (err error) {
|
||||
return s.mustSuccess(s.src)
|
||||
}
|
||||
|
||||
func (s *Connection) AppendMeasure(req proto.AppendMeasureReq) (err error) {
|
||||
arr := []byte{
|
||||
proto.TypeAppendMeasure,
|
||||
0, 0, 0, 0, // metricID
|
||||
0, 0, 0, 0, // timestamp
|
||||
0, 0, 0, 0, 0, 0, 0, 0, // value
|
||||
}
|
||||
bin.PutUint32(arr[1:], req.MetricID)
|
||||
bin.PutUint32(arr[5:], req.Timestamp)
|
||||
bin.PutFloat64(arr[9:], req.Value)
|
||||
// req
|
||||
if _, err = s.conn.Write(arr); err != nil {
|
||||
return
|
||||
}
|
||||
return s.mustSuccess(s.src)
|
||||
// func (s *Connection) AppendMeasure(req proto.AppendMeasureReq) (err error) {
|
||||
// arr := []byte{
|
||||
// proto.TypeAppendMeasure,
|
||||
// 0, 0, 0, 0, // metricID
|
||||
// 0, 0, 0, 0, // timestamp
|
||||
// 0, 0, 0, 0, 0, 0, 0, 0, // value
|
||||
// }
|
||||
// bin.PutUint32(arr[1:], req.MetricID)
|
||||
// bin.PutUint32(arr[5:], req.Timestamp)
|
||||
// bin.PutFloat64(arr[9:], req.Value)
|
||||
// // req
|
||||
// if _, err = s.conn.Write(arr); err != nil {
|
||||
// return
|
||||
// }
|
||||
// return s.mustSuccess(s.src)
|
||||
// }
|
||||
|
||||
type AppendMeasuresResult struct {
|
||||
WrittenCount int
|
||||
ErrorCode byte
|
||||
}
|
||||
|
||||
func (s *Connection) AppendMeasures(req proto.AppendMeasuresReq) (err error) {
|
||||
func (s *Connection) AppendMeasures(req proto.AppendMeasuresReq) (result AppendMeasuresResult, err error) {
|
||||
if len(req.Measures) > 65535 {
|
||||
return fmt.Errorf("wrong measures qty: %d", len(req.Measures))
|
||||
err = fmt.Errorf("wrong measures qty: %d", len(req.Measures))
|
||||
return
|
||||
}
|
||||
var (
|
||||
prefixSize = 7
|
||||
@@ -188,37 +194,6 @@ func (s *Connection) AppendMeasures(req proto.AppendMeasuresReq) (err error) {
|
||||
if _, err = s.conn.Write(arr); err != nil {
|
||||
return
|
||||
}
|
||||
return s.mustSuccess(s.src)
|
||||
}
|
||||
|
||||
// type AppendMeasurePerMetricReq struct {
|
||||
// MetricID uint32
|
||||
// Measures []Measure
|
||||
// }
|
||||
|
||||
func (s *Connection) AppendMeasurePerMetric(list []proto.MetricMeasure) (_ []proto.AppendError, err error) {
|
||||
if len(list) > 65535 {
|
||||
return nil, fmt.Errorf("wrong measures qty: %d", len(list))
|
||||
}
|
||||
var (
|
||||
// 3 bytes: 1b message type + 2b records qty
|
||||
fixedSize = 3
|
||||
recordSize = 16
|
||||
arr = make([]byte, fixedSize+len(list)*recordSize)
|
||||
)
|
||||
arr[0] = proto.TypeAppendMeasures
|
||||
bin.PutUint16(arr[1:], uint16(len(list)))
|
||||
pos := fixedSize
|
||||
for _, item := range list {
|
||||
bin.PutUint32(arr[pos:], item.MetricID)
|
||||
bin.PutUint32(arr[pos+4:], item.Timestamp)
|
||||
bin.PutFloat64(arr[pos+8:], item.Value)
|
||||
pos += recordSize
|
||||
}
|
||||
// req
|
||||
if _, err = s.conn.Write(arr); err != nil {
|
||||
return
|
||||
}
|
||||
// answer
|
||||
code, err := s.src.ReadByte()
|
||||
if err != nil {
|
||||
@@ -226,32 +201,82 @@ func (s *Connection) AppendMeasurePerMetric(list []proto.MetricMeasure) (_ []pro
|
||||
}
|
||||
switch code {
|
||||
case proto.RespValue:
|
||||
var (
|
||||
count int
|
||||
appendErrors []proto.AppendError
|
||||
)
|
||||
count, err = bin.ReadUint16AsInt(s.src)
|
||||
result.WrittenCount, err = bin.ReadUint16AsInt(s.src)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for range count {
|
||||
var ae proto.AppendError
|
||||
ae.MetricID, err = bin.ReadUint32(s.src)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
ae.ErrorCode, err = bin.ReadUint16(s.src)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
appendErrors = append(appendErrors, ae)
|
||||
result.ErrorCode, err = bin.ReadByte(s.src)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return appendErrors, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown reponse code %d", code)
|
||||
err = fmt.Errorf("unknown reponse code %d", code)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// type AppendMeasurePerMetricReq struct {
|
||||
// MetricID uint32
|
||||
// Measures []Measure
|
||||
// }
|
||||
|
||||
// func (s *Connection) AppendMeasurePerMetric(list []proto.MetricMeasure) (_ []proto.AppendError, err error) {
|
||||
// if len(list) > 65535 {
|
||||
// return nil, fmt.Errorf("wrong measures qty: %d", len(list))
|
||||
// }
|
||||
// var (
|
||||
// // 3 bytes: 1b message type + 2b records qty
|
||||
// fixedSize = 3
|
||||
// recordSize = 16
|
||||
// arr = make([]byte, fixedSize+len(list)*recordSize)
|
||||
// )
|
||||
// arr[0] = proto.TypeAppendMeasures
|
||||
// bin.PutUint16(arr[1:], uint16(len(list)))
|
||||
// pos := fixedSize
|
||||
// for _, item := range list {
|
||||
// bin.PutUint32(arr[pos:], item.MetricID)
|
||||
// bin.PutUint32(arr[pos+4:], item.Timestamp)
|
||||
// bin.PutFloat64(arr[pos+8:], item.Value)
|
||||
// pos += recordSize
|
||||
// }
|
||||
// // req
|
||||
// if _, err = s.conn.Write(arr); err != nil {
|
||||
// return
|
||||
// }
|
||||
// // answer
|
||||
// code, err := s.src.ReadByte()
|
||||
// if err != nil {
|
||||
// return
|
||||
// }
|
||||
// switch code {
|
||||
// case proto.RespValue:
|
||||
// var (
|
||||
// count int
|
||||
// appendErrors []proto.AppendError
|
||||
// )
|
||||
// count, err = bin.ReadUint16AsInt(s.src)
|
||||
// if err != nil {
|
||||
// return
|
||||
// }
|
||||
// for range count {
|
||||
// var ae proto.AppendError
|
||||
// ae.MetricID, err = bin.ReadUint32(s.src)
|
||||
// if err != nil {
|
||||
// return
|
||||
// }
|
||||
// ae.ErrorCode, err = bin.ReadUint16(s.src)
|
||||
// if err != nil {
|
||||
// return
|
||||
// }
|
||||
// appendErrors = append(appendErrors, ae)
|
||||
// }
|
||||
// return appendErrors, nil
|
||||
// default:
|
||||
// return nil, fmt.Errorf("unknown reponse code %d", code)
|
||||
// }
|
||||
// }
|
||||
|
||||
func (s *Connection) ListAllInstantMeasures(metricID uint32) (_ []proto.InstantMeasure, err error) {
|
||||
arr := []byte{
|
||||
proto.TypeListAllInstantMeasures,
|
||||
@@ -361,8 +386,10 @@ func (s *Connection) readCumulativeMeasures() (_ []proto.CumulativeMeasure, err
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("read response code: %s", err)
|
||||
}
|
||||
fmt.Println("code", code)
|
||||
switch code {
|
||||
case proto.RespPartOfValue:
|
||||
fmt.Println("RespPartOfValue")
|
||||
var count int
|
||||
count, err = bin.ReadUint32AsInt(s.src)
|
||||
if err != nil {
|
||||
@@ -385,8 +412,10 @@ func (s *Connection) readCumulativeMeasures() (_ []proto.CumulativeMeasure, err
|
||||
result = append(result, measure)
|
||||
}
|
||||
case proto.RespEndOfValue:
|
||||
fmt.Println("RespEndOfValue")
|
||||
return result, nil
|
||||
case proto.RespError:
|
||||
fmt.Println("RespError")
|
||||
return nil, s.onError()
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown reponse code %d", code)
|
||||
|
||||
Reference in New Issue
Block a user