youtubebeat/vendor/github.com/elastic/beats/metricbeat/module/ceph/cluster_status/data.go

151 lines
4.1 KiB
Go

// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package cluster_status
import (
"encoding/json"
"github.com/elastic/beats/libbeat/common"
"github.com/elastic/beats/libbeat/logp"
)
type PgState struct {
Count int64 `json:"count"`
StateName string `json:"state_name"`
}
type Pgmap struct {
AvailByte int64 `json:"bytes_avail"`
TotalByte int64 `json:"bytes_total"`
UsedByte int64 `json:"bytes_used"`
DataByte int64 `json:"data_bytes"`
DegradedObjs int64 `json:"degraded_objects"`
DegradedRatio float64 `json:"degraded_ratio"`
DegradedTotal int64 `json:"degraded_total"`
MisplacedObjs int64 `json:"misplaced_objects"`
MisplacedRatio float64 `json:"misplaced_ratio"`
MisplacedTotal int64 `json:"misplaced_total"`
ReadByteSec int64 `json:"read_bytes_sec"`
ReadOpSec int64 `json:"read_op_per_sec"`
WriteByteSec int64 `json:"write_bytes_sec"`
WriteOpSec int64 `json:"write_op_per_sec"`
Version int64 `json:"version"`
PgNum int64 `json:"num_pgs"`
PgStates []PgState `json:"pgs_by_state"`
}
type Osdmap struct {
Epoch int64 `json:"epoch"`
Full bool `json:"full"`
Nearfull bool `json:"nearfull"`
OsdNum int64 `json:"num_osds"`
UpOsds int64 `json:"num_up_osds"`
InOsds int64 `json:"num_in_osds"`
RemapedPgs int64 `json:"num_remapped_pgs"`
}
type Osdmap_ struct {
Osdmap Osdmap `json:"osdmap"`
}
type Output struct {
Pgmap Pgmap `json:"pgmap"`
Osdmap Osdmap_ `json:"osdmap"`
}
type HealthRequest struct {
Status string `json:"status"`
Output Output `json:"output"`
}
func eventsMapping(content []byte) ([]common.MapStr, error) {
var d HealthRequest
err := json.Unmarshal(content, &d)
if err != nil {
logp.Err("Error: ", err)
return nil, err
}
//osd map info
osdmap := d.Output.Osdmap.Osdmap
osdState := common.MapStr{}
osdState["epoch"] = osdmap.Epoch
osdState["full"] = osdmap.Full
osdState["nearfull"] = osdmap.Nearfull
osdState["osd_count"] = osdmap.OsdNum
osdState["up_osd_count"] = osdmap.UpOsds
osdState["in_osd_count"] = osdmap.InOsds
osdState["remapped_pg_count"] = osdmap.RemapedPgs
//pg map info
pgmap := d.Output.Pgmap
traffic := common.MapStr{}
traffic["read_bytes"] = pgmap.ReadByteSec
traffic["read_op_per_sec"] = pgmap.ReadOpSec
traffic["write_bytes"] = pgmap.WriteByteSec
traffic["write_op_per_sec"] = pgmap.WriteOpSec
misplace := common.MapStr{}
misplace["objects"] = pgmap.MisplacedObjs
misplace["pct"] = pgmap.MisplacedRatio
misplace["total"] = pgmap.MisplacedTotal
degraded := common.MapStr{}
degraded["objects"] = pgmap.DegradedObjs
degraded["pct"] = pgmap.DegradedRatio
degraded["total"] = pgmap.DegradedTotal
pg := common.MapStr{}
pg["avail_bytes"] = pgmap.AvailByte
pg["total_bytes"] = pgmap.TotalByte
pg["used_bytes"] = pgmap.UsedByte
pg["data_bytes"] = pgmap.DataByte
state_event := common.MapStr{}
state_event["osd"] = osdState
state_event["traffic"] = traffic
state_event["misplace"] = misplace
state_event["degraded"] = degraded
state_event["pg"] = pg
state_event["version"] = pgmap.Version
events := []common.MapStr{}
events = append(events, state_event)
//pg state info
for _, state := range pgmap.PgStates {
state_evn := common.MapStr{
"count": state.Count,
"state_name": state.StateName,
"version": pgmap.Version,
}
evt := common.MapStr{
"pg_state": state_evn,
}
events = append(events, evt)
}
return events, nil
}