Browse Source

simplify metrics settings

pull/991/head
Chris Lu 6 years ago
parent
commit
d5560f2705
  1. 6
      weed/command/filer.go
  2. 9
      weed/command/server.go
  3. 9
      weed/pb/master.proto
  4. 302
      weed/pb/master_pb/master.pb.go
  5. 42
      weed/server/filer_server.go
  6. 10
      weed/server/master_grpc_server_volume.go
  7. 4
      weed/stats/metrics.go

6
weed/command/filer.go

@ -34,8 +34,6 @@ type FilerOptions struct {
dataCenter *string
enableNotification *bool
disableHttp *bool
metricsAddress *string
metricsIntervalSec *int
// default leveldb directory, used in "weed server" mode
defaultLevelDbDirectory *string
@ -55,8 +53,6 @@ func init() {
f.dirListingLimit = cmdFiler.Flag.Int("dirListLimit", 100000, "limit sub dir listing size")
f.dataCenter = cmdFiler.Flag.String("dataCenter", "", "prefer to write to volumes in this data center")
f.disableHttp = cmdFiler.Flag.Bool("disableHttp", false, "disable http request, only gRpc operations are allowed")
f.metricsAddress = cmdFiler.Flag.String("metrics.address", "", "Prometheus gateway address")
f.metricsIntervalSec = cmdFiler.Flag.Int("metrics.intervalSeconds", 15, "Prometheus push interval in seconds")
}
var cmdFiler = &Command{
@ -114,8 +110,6 @@ func (fo *FilerOptions) startFiler() {
DataCenter: *fo.dataCenter,
DefaultLevelDbDir: defaultLevelDbDirectory,
DisableHttp: *fo.disableHttp,
MetricsAddress: *fo.metricsAddress,
MetricsIntervalSec: *fo.metricsIntervalSec,
Port: *fo.port,
})
if nfs_err != nil {

9
weed/command/server.go

@ -63,8 +63,6 @@ var (
serverRack = cmdServer.Flag.String("rack", "", "current volume server's rack name")
serverWhiteListOption = cmdServer.Flag.String("whiteList", "", "comma separated Ip addresses having write permission. No limit if empty.")
serverDisableHttp = cmdServer.Flag.Bool("disableHttp", false, "disable http requests, only gRPC operations are allowed.")
serverMetricsAddress = cmdServer.Flag.String("metrics.address", "", "Prometheus gateway address")
serverMetricsIntervalSec = cmdServer.Flag.Int("metrics.intervalSeconds", 15, "Prometheus push interval in seconds")
volumeDataFolders = cmdServer.Flag.String("dir", os.TempDir(), "directories to store data files. dir[,dir]...")
volumeMaxDataVolumeCounts = cmdServer.Flag.String("volume.max", "7", "maximum numbers of volumes, count[,count]...")
pulseSeconds = cmdServer.Flag.Int("pulseSeconds", 5, "number of seconds between heartbeats")
@ -84,6 +82,8 @@ func init() {
masterOptions.volumePreallocate = cmdServer.Flag.Bool("master.volumePreallocate", false, "Preallocate disk space for volumes.")
masterOptions.defaultReplication = cmdServer.Flag.String("master.defaultReplication", "000", "Default replication type if not specified.")
masterOptions.garbageThreshold = cmdServer.Flag.Float64("garbageThreshold", 0.3, "threshold to vacuum and reclaim spaces")
masterOptions.metricsAddress = cmdServer.Flag.String("metrics.address", "", "Prometheus gateway address")
masterOptions.metricsIntervalSec = cmdServer.Flag.Int("metrics.intervalSeconds", 15, "Prometheus push interval in seconds")
filerOptions.collection = cmdServer.Flag.String("filer.collection", "", "all data will be stored in this collection")
filerOptions.port = cmdServer.Flag.Int("filer.port", 8888, "filer server http listen port")
@ -153,11 +153,6 @@ func runServer(cmd *Command, args []string) bool {
filerOptions.disableHttp = serverDisableHttp
masterOptions.disableHttp = serverDisableHttp
filerOptions.metricsAddress = serverMetricsAddress
filerOptions.metricsIntervalSec = serverMetricsIntervalSec
masterOptions.metricsAddress = serverMetricsAddress
masterOptions.metricsIntervalSec = serverMetricsIntervalSec
filerAddress := fmt.Sprintf("%s:%d", *serverIp, *filerOptions.port)
s3Options.filer = &filerAddress

9
weed/pb/master.proto

@ -23,6 +23,8 @@ service Seaweed {
}
rpc LookupEcVolume (LookupEcVolumeRequest) returns (LookupEcVolumeResponse) {
}
rpc GetMasterConfiguration (GetMasterConfigurationRequest) returns (GetMasterConfigurationResponse) {
}
}
//////////////////////////////////////////////////
@ -239,3 +241,10 @@ message LookupEcVolumeResponse {
}
repeated EcShardIdLocation shard_id_locations = 2;
}
message GetMasterConfigurationRequest {
}
message GetMasterConfigurationResponse {
string metrics_address = 1;
uint32 metrics_interval_seconds = 2;
}

302
weed/pb/master_pb/master.pb.go

@ -39,6 +39,8 @@ It has these top-level messages:
VolumeListResponse
LookupEcVolumeRequest
LookupEcVolumeResponse
GetMasterConfigurationRequest
GetMasterConfigurationResponse
*/
package master_pb
@ -1284,6 +1286,38 @@ func (m *LookupEcVolumeResponse_EcShardIdLocation) GetLocations() []*Location {
return nil
}
type GetMasterConfigurationRequest struct {
}
func (m *GetMasterConfigurationRequest) Reset() { *m = GetMasterConfigurationRequest{} }
func (m *GetMasterConfigurationRequest) String() string { return proto.CompactTextString(m) }
func (*GetMasterConfigurationRequest) ProtoMessage() {}
func (*GetMasterConfigurationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
type GetMasterConfigurationResponse struct {
MetricsAddress string `protobuf:"bytes,1,opt,name=metrics_address,json=metricsAddress" json:"metrics_address,omitempty"`
MetricsIntervalSeconds uint32 `protobuf:"varint,2,opt,name=metrics_interval_seconds,json=metricsIntervalSeconds" json:"metrics_interval_seconds,omitempty"`
}
func (m *GetMasterConfigurationResponse) Reset() { *m = GetMasterConfigurationResponse{} }
func (m *GetMasterConfigurationResponse) String() string { return proto.CompactTextString(m) }
func (*GetMasterConfigurationResponse) ProtoMessage() {}
func (*GetMasterConfigurationResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (m *GetMasterConfigurationResponse) GetMetricsAddress() string {
if m != nil {
return m.MetricsAddress
}
return ""
}
func (m *GetMasterConfigurationResponse) GetMetricsIntervalSeconds() uint32 {
if m != nil {
return m.MetricsIntervalSeconds
}
return 0
}
func init() {
proto.RegisterType((*Heartbeat)(nil), "master_pb.Heartbeat")
proto.RegisterType((*HeartbeatResponse)(nil), "master_pb.HeartbeatResponse")
@ -1318,6 +1352,8 @@ func init() {
proto.RegisterType((*LookupEcVolumeRequest)(nil), "master_pb.LookupEcVolumeRequest")
proto.RegisterType((*LookupEcVolumeResponse)(nil), "master_pb.LookupEcVolumeResponse")
proto.RegisterType((*LookupEcVolumeResponse_EcShardIdLocation)(nil), "master_pb.LookupEcVolumeResponse.EcShardIdLocation")
proto.RegisterType((*GetMasterConfigurationRequest)(nil), "master_pb.GetMasterConfigurationRequest")
proto.RegisterType((*GetMasterConfigurationResponse)(nil), "master_pb.GetMasterConfigurationResponse")
}
// Reference imports to suppress errors if they are not otherwise used.
@ -1340,6 +1376,7 @@ type SeaweedClient interface {
CollectionDelete(ctx context.Context, in *CollectionDeleteRequest, opts ...grpc.CallOption) (*CollectionDeleteResponse, error)
VolumeList(ctx context.Context, in *VolumeListRequest, opts ...grpc.CallOption) (*VolumeListResponse, error)
LookupEcVolume(ctx context.Context, in *LookupEcVolumeRequest, opts ...grpc.CallOption) (*LookupEcVolumeResponse, error)
GetMasterConfiguration(ctx context.Context, in *GetMasterConfigurationRequest, opts ...grpc.CallOption) (*GetMasterConfigurationResponse, error)
}
type seaweedClient struct {
@ -1475,6 +1512,15 @@ func (c *seaweedClient) LookupEcVolume(ctx context.Context, in *LookupEcVolumeRe
return out, nil
}
func (c *seaweedClient) GetMasterConfiguration(ctx context.Context, in *GetMasterConfigurationRequest, opts ...grpc.CallOption) (*GetMasterConfigurationResponse, error) {
out := new(GetMasterConfigurationResponse)
err := grpc.Invoke(ctx, "/master_pb.Seaweed/GetMasterConfiguration", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for Seaweed service
type SeaweedServer interface {
@ -1487,6 +1533,7 @@ type SeaweedServer interface {
CollectionDelete(context.Context, *CollectionDeleteRequest) (*CollectionDeleteResponse, error)
VolumeList(context.Context, *VolumeListRequest) (*VolumeListResponse, error)
LookupEcVolume(context.Context, *LookupEcVolumeRequest) (*LookupEcVolumeResponse, error)
GetMasterConfiguration(context.Context, *GetMasterConfigurationRequest) (*GetMasterConfigurationResponse, error)
}
func RegisterSeaweedServer(s *grpc.Server, srv SeaweedServer) {
@ -1671,6 +1718,24 @@ func _Seaweed_LookupEcVolume_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler)
}
func _Seaweed_GetMasterConfiguration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetMasterConfigurationRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(SeaweedServer).GetMasterConfiguration(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/master_pb.Seaweed/GetMasterConfiguration",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SeaweedServer).GetMasterConfiguration(ctx, req.(*GetMasterConfigurationRequest))
}
return interceptor(ctx, in, info, handler)
}
var _Seaweed_serviceDesc = grpc.ServiceDesc{
ServiceName: "master_pb.Seaweed",
HandlerType: (*SeaweedServer)(nil),
@ -1703,6 +1768,10 @@ var _Seaweed_serviceDesc = grpc.ServiceDesc{
MethodName: "LookupEcVolume",
Handler: _Seaweed_LookupEcVolume_Handler,
},
{
MethodName: "GetMasterConfiguration",
Handler: _Seaweed_GetMasterConfiguration_Handler,
},
},
Streams: []grpc.StreamDesc{
{
@ -1724,120 +1793,123 @@ var _Seaweed_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("master.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 1832 bytes of a gzipped FileDescriptorProto
// 1888 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x58, 0xcd, 0x6f, 0x1c, 0x49,
0x15, 0x4f, 0xcf, 0x8c, 0xed, 0x99, 0x37, 0x1f, 0x9e, 0x29, 0x3b, 0xde, 0xc9, 0x2c, 0xd9, 0x4c,
0x7a, 0x91, 0xd6, 0x1b, 0x16, 0xb3, 0x64, 0x57, 0x02, 0x09, 0xd0, 0x2a, 0x71, 0xbc, 0x60, 0x25,
0x9b, 0x4d, 0x7a, 0x42, 0x90, 0x90, 0x50, 0x53, 0xee, 0x7e, 0xb6, 0x4b, 0xee, 0xe9, 0x6e, 0xba,
0x6a, 0x1c, 0xcf, 0x72, 0xe0, 0x00, 0x37, 0x24, 0x2e, 0x9c, 0xb9, 0xf3, 0x37, 0x70, 0xe0, 0xc2,
0x91, 0xbf, 0x82, 0x03, 0xff, 0x00, 0x57, 0x84, 0x84, 0xea, 0xab, 0x3f, 0x66, 0xc6, 0xf6, 0x66,
0xa5, 0x1c, 0x72, 0xab, 0x7e, 0x5f, 0xf5, 0xea, 0xf7, 0xea, 0x7d, 0x54, 0x43, 0x67, 0x4a, 0xb9,
0xc0, 0x6c, 0x2f, 0xcd, 0x12, 0x91, 0x90, 0x96, 0xfe, 0xf2, 0xd3, 0x23, 0xf7, 0x8f, 0xeb, 0xd0,
0xfa, 0x19, 0xd2, 0x4c, 0x1c, 0x21, 0x15, 0xa4, 0x07, 0x35, 0x96, 0x0e, 0x9d, 0xb1, 0xb3, 0xdb,
0xf2, 0x6a, 0x2c, 0x25, 0x04, 0x1a, 0x69, 0x92, 0x89, 0x61, 0x6d, 0xec, 0xec, 0x76, 0x3d, 0xb5,
0x26, 0xb7, 0x01, 0xd2, 0xd9, 0x51, 0xc4, 0x02, 0x7f, 0x96, 0x45, 0xc3, 0xba, 0x92, 0x6d, 0x69,
0xca, 0xcf, 0xb3, 0x88, 0xec, 0x42, 0x7f, 0x4a, 0x2f, 0xfc, 0xf3, 0x24, 0x9a, 0x4d, 0xd1, 0x0f,
0x92, 0x59, 0x2c, 0x86, 0x0d, 0xa5, 0xde, 0x9b, 0xd2, 0x8b, 0x97, 0x8a, 0xbc, 0x2f, 0xa9, 0x64,
0x2c, 0xbd, 0xba, 0xf0, 0x8f, 0x59, 0x84, 0xfe, 0x19, 0xce, 0x87, 0x6b, 0x63, 0x67, 0xb7, 0xe1,
0xc1, 0x94, 0x5e, 0x7c, 0xce, 0x22, 0x7c, 0x8c, 0x73, 0x72, 0x07, 0xda, 0x21, 0x15, 0xd4, 0x0f,
0x30, 0x16, 0x98, 0x0d, 0xd7, 0xd5, 0x5e, 0x20, 0x49, 0xfb, 0x8a, 0x22, 0xfd, 0xcb, 0x68, 0x70,
0x36, 0xdc, 0x50, 0x1c, 0xb5, 0x96, 0xfe, 0xd1, 0x70, 0xca, 0x62, 0x5f, 0x79, 0xde, 0x54, 0x5b,
0xb7, 0x14, 0xe5, 0x99, 0x74, 0xff, 0x27, 0xb0, 0xa1, 0x7d, 0xe3, 0xc3, 0xd6, 0xb8, 0xbe, 0xdb,
0xbe, 0xff, 0xfe, 0x5e, 0x8e, 0xc6, 0x9e, 0x76, 0xef, 0x30, 0x3e, 0x4e, 0xb2, 0x29, 0x15, 0x2c,
0x89, 0xbf, 0x40, 0xce, 0xe9, 0x09, 0x7a, 0x56, 0x87, 0x1c, 0x42, 0x3b, 0xc6, 0x57, 0xbe, 0x35,
0x01, 0xca, 0xc4, 0xee, 0x92, 0x89, 0xc9, 0x69, 0x92, 0x89, 0x15, 0x76, 0x20, 0xc6, 0x57, 0x2f,
0x8d, 0xa9, 0xe7, 0xb0, 0x19, 0x62, 0x84, 0x02, 0xc3, 0xdc, 0x5c, 0xfb, 0x35, 0xcd, 0xf5, 0x8c,
0x01, 0x6b, 0xf2, 0xdb, 0xd0, 0x3b, 0xa5, 0xdc, 0x8f, 0x93, 0xdc, 0x62, 0x67, 0xec, 0xec, 0x36,
0xbd, 0xce, 0x29, 0xe5, 0x4f, 0x13, 0x2b, 0xf5, 0x53, 0x68, 0x61, 0xe0, 0xf3, 0x53, 0x9a, 0x85,
0x7c, 0xd8, 0x57, 0x5b, 0xde, 0x5b, 0xda, 0xf2, 0x20, 0x98, 0x48, 0x81, 0x15, 0x9b, 0x36, 0x51,
0xb3, 0x38, 0x79, 0x0a, 0x5d, 0x09, 0x46, 0x61, 0x6c, 0xf0, 0xda, 0xc6, 0x24, 0x9a, 0x07, 0xd6,
0xde, 0x4b, 0x18, 0x58, 0x44, 0x0a, 0x9b, 0xe4, 0xb5, 0x6d, 0x5a, 0x58, 0x73, 0xbb, 0x1f, 0x40,
0xdf, 0xc0, 0x52, 0x98, 0xdd, 0x52, 0xc0, 0x74, 0x15, 0x30, 0x56, 0xd0, 0xfd, 0x9b, 0x03, 0x83,
0x3c, 0x1b, 0x3c, 0xe4, 0x69, 0x12, 0x73, 0x24, 0xf7, 0x60, 0x60, 0xae, 0x33, 0x67, 0x5f, 0xa1,
0x1f, 0xb1, 0x29, 0x13, 0x2a, 0x49, 0x1a, 0xde, 0xa6, 0x66, 0x4c, 0xd8, 0x57, 0xf8, 0x44, 0x92,
0xc9, 0x0e, 0xac, 0x47, 0x48, 0x43, 0xcc, 0x54, 0xce, 0xb4, 0x3c, 0xf3, 0x45, 0x3e, 0x80, 0xcd,
0x29, 0x8a, 0x8c, 0x05, 0xdc, 0xa7, 0x61, 0x98, 0x21, 0xe7, 0x26, 0x75, 0x7a, 0x86, 0xfc, 0x40,
0x53, 0xc9, 0x0f, 0x61, 0x68, 0x05, 0x99, 0xbc, 0xe3, 0xe7, 0x34, 0xf2, 0x39, 0x06, 0x49, 0x1c,
0x72, 0x93, 0x47, 0x3b, 0x86, 0x7f, 0x68, 0xd8, 0x13, 0xcd, 0x75, 0xff, 0x52, 0x87, 0xe1, 0x65,
0x17, 0x58, 0x65, 0x76, 0xa8, 0x9c, 0xee, 0x7a, 0x35, 0x16, 0xca, 0xcc, 0x91, 0x87, 0x51, 0x5e,
0x36, 0x3c, 0xb5, 0x26, 0xef, 0x01, 0x04, 0x49, 0x14, 0x61, 0x20, 0x15, 0x8d, 0x7b, 0x25, 0x8a,
0xcc, 0x2c, 0x95, 0xac, 0x45, 0x52, 0x37, 0xbc, 0x96, 0xa4, 0xe8, 0x7c, 0xbe, 0x0b, 0x1d, 0x0d,
0xbc, 0x11, 0xd0, 0xf9, 0xdc, 0xd6, 0x34, 0x2d, 0xf2, 0x11, 0x10, 0x1b, 0xe0, 0xa3, 0x79, 0x2e,
0xb8, 0xae, 0x04, 0xfb, 0x86, 0xf3, 0x70, 0x6e, 0xa5, 0xdf, 0x85, 0x56, 0x86, 0x34, 0xf4, 0x93,
0x38, 0x9a, 0xab, 0x14, 0x6f, 0x7a, 0x4d, 0x49, 0xf8, 0x32, 0x8e, 0xe6, 0xe4, 0x3b, 0x30, 0xc8,
0x30, 0x8d, 0x58, 0x40, 0xfd, 0x34, 0xa2, 0x01, 0x4e, 0x31, 0xb6, 0xd9, 0xde, 0x37, 0x8c, 0x67,
0x96, 0x4e, 0x86, 0xb0, 0x71, 0x8e, 0x19, 0x97, 0xc7, 0x6a, 0x29, 0x11, 0xfb, 0x49, 0xfa, 0x50,
0x17, 0x22, 0x1a, 0x82, 0xa2, 0xca, 0x25, 0xf9, 0x10, 0xfa, 0x41, 0x32, 0x4d, 0x69, 0x20, 0xfc,
0x0c, 0xcf, 0x99, 0x52, 0x6a, 0x2b, 0xf6, 0xa6, 0xa1, 0x7b, 0x86, 0x2c, 0x8f, 0x33, 0x4d, 0x42,
0x76, 0xcc, 0x30, 0xf4, 0xa9, 0x30, 0x61, 0x52, 0x29, 0x57, 0xf7, 0xfa, 0x96, 0xf3, 0x40, 0xe8,
0x00, 0xb9, 0x7f, 0x75, 0xe0, 0xf6, 0x95, 0xe9, 0xbc, 0x14, 0xa4, 0xeb, 0x02, 0xf2, 0xa6, 0x30,
0x70, 0x67, 0x70, 0xe7, 0x9a, 0x24, 0xbb, 0xc6, 0xd7, 0xda, 0x92, 0xaf, 0x2e, 0x74, 0x31, 0xf0,
0x59, 0x1c, 0xe2, 0x85, 0x7f, 0xc4, 0x84, 0xbe, 0xfe, 0x5d, 0xaf, 0x8d, 0xc1, 0xa1, 0xa4, 0x3d,
0x64, 0x82, 0xbb, 0x1b, 0xb0, 0x76, 0x30, 0x4d, 0xc5, 0xdc, 0xfd, 0xbb, 0x03, 0x9b, 0x93, 0x59,
0x8a, 0xd9, 0xc3, 0x28, 0x09, 0xce, 0x0e, 0x2e, 0x44, 0x46, 0xc9, 0x97, 0xd0, 0xc3, 0x8c, 0xf2,
0x59, 0x26, 0xaf, 0x4d, 0xc8, 0xe2, 0x13, 0xb5, 0x79, 0xb5, 0x5a, 0x2e, 0xe8, 0xec, 0x1d, 0x68,
0x85, 0x7d, 0x25, 0xef, 0x75, 0xb1, 0xfc, 0x39, 0xfa, 0x25, 0x74, 0x2b, 0x7c, 0x99, 0x13, 0xb2,
0xb7, 0x98, 0x43, 0xa9, 0xb5, 0xcc, 0xe7, 0x94, 0x66, 0x4c, 0xcc, 0x4d, 0x0f, 0x34, 0x5f, 0x32,
0x17, 0x4c, 0x4d, 0x60, 0xa1, 0x3c, 0x4b, 0x5d, 0x76, 0x19, 0x4d, 0x39, 0x0c, 0xb9, 0xfb, 0x21,
0x6c, 0xed, 0x47, 0x0c, 0x63, 0xf1, 0x84, 0x71, 0x81, 0xb1, 0x87, 0xbf, 0x99, 0x21, 0x17, 0x72,
0x87, 0x98, 0x4e, 0xd1, 0x74, 0x58, 0xb5, 0x76, 0x7f, 0x07, 0x3d, 0x8d, 0xf5, 0x93, 0x24, 0x50,
0x08, 0xcb, 0x78, 0xc8, 0xd6, 0xaa, 0x85, 0xe4, 0x72, 0xa1, 0xe7, 0xd6, 0x16, 0x7b, 0xee, 0x2d,
0x68, 0xaa, 0xa6, 0x54, 0xb8, 0xb2, 0x21, 0xfb, 0x0c, 0x0b, 0x79, 0x91, 0x94, 0xa1, 0x66, 0x37,
0x14, 0xbb, 0x6d, 0xfb, 0x06, 0x0b, 0xb9, 0xfb, 0x02, 0xb6, 0x9e, 0x24, 0xc9, 0xd9, 0x2c, 0xd5,
0x6e, 0x58, 0x5f, 0xab, 0x27, 0x74, 0xc6, 0x75, 0xb9, 0x67, 0x7e, 0xc2, 0xeb, 0xe2, 0xed, 0xfe,
0xc7, 0x81, 0xed, 0xaa, 0x59, 0x53, 0x4d, 0x7f, 0x0d, 0x5b, 0xb9, 0x5d, 0x3f, 0x32, 0x67, 0xd6,
0x1b, 0xb4, 0xef, 0x7f, 0x5c, 0x0a, 0xe6, 0x2a, 0x6d, 0xdb, 0xa1, 0x43, 0x0b, 0x96, 0x37, 0x38,
0x5f, 0xa0, 0xf0, 0xd1, 0x05, 0xf4, 0x17, 0xc5, 0x64, 0x2d, 0xc9, 0x77, 0x35, 0xc8, 0x36, 0xad,
0x26, 0xf9, 0x3e, 0xb4, 0x0a, 0x47, 0x6a, 0xca, 0x91, 0xad, 0x8a, 0x23, 0x66, 0xaf, 0x42, 0x8a,
0x6c, 0xc3, 0x1a, 0x66, 0x59, 0x92, 0x99, 0xac, 0xd4, 0x1f, 0xee, 0x8f, 0xa0, 0xf9, 0x8d, 0xa3,
0xe8, 0xfe, 0xd3, 0x81, 0xee, 0x03, 0xce, 0xd9, 0x49, 0x7e, 0x5d, 0xb6, 0x61, 0x4d, 0x57, 0x48,
0xdd, 0x6c, 0xf4, 0x07, 0x19, 0x43, 0xdb, 0x24, 0x77, 0x09, 0xfa, 0x32, 0xe9, 0xda, 0xba, 0x61,
0x12, 0xbe, 0xa1, 0x5d, 0x93, 0x45, 0x6f, 0x61, 0xd2, 0x5a, 0xbb, 0x74, 0xd2, 0x5a, 0x2f, 0x4d,
0x5a, 0xef, 0x42, 0x4b, 0x29, 0xc5, 0x49, 0x88, 0x66, 0x04, 0x6b, 0x4a, 0xc2, 0xd3, 0x24, 0x44,
0xf7, 0xcf, 0x0e, 0xf4, 0xec, 0x69, 0x4c, 0xe4, 0xfb, 0x50, 0x3f, 0xce, 0xd1, 0x97, 0x4b, 0x8b,
0x51, 0xed, 0x32, 0x8c, 0x96, 0xa6, 0xcb, 0x1c, 0x91, 0x46, 0x19, 0x91, 0x3c, 0x18, 0x6b, 0xa5,
0x60, 0x48, 0x97, 0xe9, 0x4c, 0x9c, 0x5a, 0x97, 0xe5, 0xda, 0x3d, 0x81, 0xc1, 0x44, 0x50, 0xc1,
0xb8, 0x60, 0x01, 0xb7, 0x30, 0x2f, 0x00, 0xea, 0x5c, 0x07, 0x68, 0xed, 0x32, 0x40, 0xeb, 0x39,
0xa0, 0xee, 0x3f, 0x1c, 0x20, 0xe5, 0x9d, 0x0c, 0x04, 0x6f, 0x60, 0x2b, 0x09, 0x99, 0x48, 0x84,
0x1c, 0x13, 0x64, 0x43, 0x37, 0x6d, 0x59, 0x51, 0xe4, 0x58, 0x22, 0xa3, 0x34, 0xe3, 0x18, 0x6a,
0xae, 0xee, 0xc9, 0x4d, 0x49, 0x50, 0xcc, 0x6a, 0x4b, 0x5f, 0x5f, 0x68, 0xe9, 0xee, 0x03, 0x68,
0x4f, 0x44, 0x92, 0xd1, 0x13, 0x7c, 0x31, 0x4f, 0xbf, 0x8e, 0xf7, 0xc6, 0xbb, 0x5a, 0x01, 0xc4,
0x18, 0x60, 0xbf, 0xf0, 0x7e, 0x55, 0x01, 0xfc, 0x2d, 0xdc, 0x2c, 0x24, 0x64, 0xbd, 0xb4, 0x71,
0xf9, 0x14, 0x76, 0x58, 0x1c, 0x44, 0xb3, 0x10, 0xfd, 0x58, 0xb6, 0x9f, 0x28, 0x9f, 0x6a, 0x1d,
0x35, 0x0c, 0x6c, 0x1b, 0xee, 0x53, 0xc5, 0xb4, 0xd3, 0xed, 0x47, 0x40, 0xac, 0x16, 0x06, 0xb9,
0x46, 0x4d, 0x69, 0xf4, 0x0d, 0xe7, 0x20, 0x30, 0xd2, 0xee, 0x73, 0xd8, 0x59, 0xdc, 0xdc, 0x84,
0xea, 0x07, 0xd0, 0x2e, 0x60, 0xb7, 0xf5, 0xe9, 0x66, 0xa9, 0x2c, 0x14, 0x7a, 0x5e, 0x59, 0xd2,
0xfd, 0x2e, 0xbc, 0x53, 0xb0, 0x1e, 0xa9, 0x42, 0x7b, 0x55, 0xfd, 0x1f, 0xc1, 0x70, 0x59, 0x5c,
0xfb, 0xe0, 0xfe, 0xab, 0x06, 0x9d, 0x47, 0x26, 0xa3, 0x64, 0x0f, 0x2e, 0x75, 0xdd, 0x96, 0xea,
0xba, 0x77, 0xa1, 0x53, 0x79, 0x69, 0xe9, 0x71, 0xae, 0x7d, 0x5e, 0x7a, 0x66, 0xad, 0x7a, 0x90,
0xd5, 0x95, 0xd8, 0xe2, 0x83, 0xec, 0x1e, 0x0c, 0x8e, 0x33, 0xc4, 0xe5, 0xb7, 0x5b, 0xc3, 0xdb,
0x94, 0x8c, 0xb2, 0xec, 0x1e, 0x6c, 0xd1, 0x40, 0xb0, 0xf3, 0x05, 0x69, 0x7d, 0xbf, 0x06, 0x9a,
0x55, 0x96, 0xff, 0x3c, 0x77, 0x94, 0xc5, 0xc7, 0x09, 0x1f, 0xae, 0x7f, 0xfd, 0xb7, 0x97, 0x39,
0x8d, 0xe4, 0x70, 0xf2, 0x0c, 0x7a, 0x76, 0x86, 0x37, 0x96, 0x36, 0x5e, 0xfb, 0x7d, 0xd0, 0xc1,
0x82, 0xc5, 0xdd, 0x3f, 0xd4, 0xa0, 0xe9, 0xd1, 0xe0, 0xec, 0xed, 0xc6, 0xf7, 0x33, 0xd8, 0xcc,
0x6b, 0x71, 0x05, 0xe2, 0x77, 0x4a, 0xc0, 0x94, 0xaf, 0x92, 0xd7, 0x0d, 0x4b, 0x5f, 0xdc, 0xfd,
0x9f, 0x03, 0xbd, 0x47, 0x79, 0xbd, 0x7f, 0xbb, 0xc1, 0xb8, 0x0f, 0x20, 0x1b, 0x54, 0x05, 0x87,
0x72, 0x43, 0xb7, 0xe1, 0xf6, 0x5a, 0x99, 0x59, 0x71, 0xf7, 0x4f, 0x35, 0xe8, 0xbc, 0x48, 0xd2,
0x24, 0x4a, 0x4e, 0xe6, 0x6f, 0xf7, 0xe9, 0x0f, 0x60, 0x50, 0xea, 0xe5, 0x15, 0x10, 0x6e, 0x2d,
0x5c, 0x86, 0x22, 0xd8, 0xde, 0x66, 0x58, 0xf9, 0xe6, 0xee, 0x16, 0x0c, 0xcc, 0x5c, 0x5a, 0x94,
0x64, 0xf7, 0xf7, 0x0e, 0x90, 0x32, 0xd5, 0xd4, 0xca, 0x1f, 0x43, 0x57, 0x18, 0xec, 0xd4, 0x7e,
0x66, 0x34, 0x2f, 0xdf, 0xbd, 0x32, 0xb6, 0x5e, 0x47, 0x94, 0x91, 0xfe, 0x1e, 0x6c, 0x2f, 0xbd,
0xaf, 0xfd, 0xe9, 0x91, 0x41, 0x78, 0xb0, 0xf0, 0xc4, 0xfe, 0xe2, 0xc8, 0xfd, 0x14, 0x6e, 0xea,
0xe1, 0xd0, 0xd6, 0x71, 0x5b, 0x5f, 0x97, 0xa6, 0xbc, 0x6e, 0x31, 0xe5, 0xb9, 0xff, 0x75, 0x60,
0x67, 0x51, 0xcd, 0xf8, 0x7f, 0x95, 0x1e, 0xa1, 0x40, 0x4c, 0xbd, 0x29, 0xcf, 0xab, 0x7a, 0x4c,
0xfc, 0x64, 0x69, 0x5e, 0x5d, 0xb4, 0xbd, 0x67, 0xeb, 0x50, 0x31, 0xb2, 0xf6, 0x79, 0x95, 0xc0,
0x47, 0x14, 0x06, 0x4b, 0x62, 0x72, 0xaa, 0xb7, 0xfb, 0x1a, 0x9f, 0x36, 0x8c, 0xe2, 0x37, 0x18,
0x58, 0xef, 0xff, 0x7b, 0x0d, 0x36, 0x26, 0x48, 0x5f, 0x21, 0x86, 0xe4, 0x10, 0xba, 0x13, 0x8c,
0xc3, 0xe2, 0xbf, 0xdf, 0x76, 0x49, 0x39, 0xa7, 0x8e, 0xbe, 0xb5, 0x8a, 0x9a, 0xf7, 0xa6, 0x1b,
0xbb, 0xce, 0xc7, 0x0e, 0x79, 0x06, 0xdd, 0xc7, 0x88, 0xe9, 0x7e, 0x12, 0xc7, 0x18, 0x08, 0x0c,
0xc9, 0x7b, 0xe5, 0x0e, 0xb9, 0xfc, 0x04, 0x1a, 0xdd, 0x5a, 0x2a, 0xd4, 0xd6, 0x5b, 0x63, 0xf1,
0x39, 0x74, 0xca, 0x93, 0x7f, 0xc5, 0xe0, 0x8a, 0x77, 0xca, 0xe8, 0xce, 0x35, 0x4f, 0x06, 0xf7,
0x06, 0xf9, 0x0c, 0xd6, 0xf5, 0x28, 0x4a, 0x86, 0x25, 0xe1, 0xca, 0xac, 0x5d, 0xf1, 0xab, 0x3a,
0xb7, 0xba, 0x37, 0xc8, 0x63, 0x80, 0x62, 0x98, 0x23, 0x65, 0x5c, 0x96, 0xa6, 0xc9, 0xd1, 0xed,
0x4b, 0xb8, 0xb9, 0xb1, 0x5f, 0x40, 0xaf, 0x3a, 0x72, 0x90, 0xf1, 0xca, 0xa9, 0xa2, 0x94, 0x77,
0xa3, 0xbb, 0x57, 0x48, 0xe4, 0x86, 0x7f, 0x05, 0xfd, 0xc5, 0x49, 0x82, 0xb8, 0x2b, 0x15, 0x2b,
0x53, 0xc9, 0xe8, 0xfd, 0x2b, 0x65, 0xca, 0x20, 0x14, 0xa9, 0x5f, 0x01, 0x61, 0xa9, 0x4e, 0x54,
0x40, 0x58, 0xae, 0x17, 0x1a, 0x84, 0x6a, 0xbe, 0x54, 0x40, 0x58, 0x99, 0xdd, 0x15, 0x10, 0x56,
0x27, 0x9b, 0x7b, 0xe3, 0x68, 0x5d, 0xfd, 0xe2, 0xfe, 0xe4, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff,
0x76, 0xec, 0xe7, 0x98, 0xf2, 0x16, 0x00, 0x00,
0x15, 0x4f, 0xcf, 0x8c, 0xc7, 0x33, 0x6f, 0x3e, 0x3c, 0x53, 0x76, 0xbc, 0x93, 0x59, 0x92, 0x4c,
0x7a, 0x91, 0xd6, 0x09, 0x8b, 0x59, 0xb2, 0x2b, 0x81, 0x04, 0x68, 0x95, 0x38, 0xde, 0xc5, 0xca,
0xc7, 0x3a, 0x3d, 0x21, 0x48, 0x48, 0xa8, 0xa9, 0xe9, 0x2e, 0xdb, 0x25, 0xf7, 0x74, 0x37, 0x5d,
0x35, 0x8e, 0x67, 0x39, 0x70, 0x80, 0x1b, 0x12, 0x17, 0xce, 0xdc, 0xf9, 0x1b, 0x38, 0x70, 0xe1,
0xc8, 0x9d, 0x3b, 0xff, 0x02, 0x57, 0x84, 0xb4, 0xaa, 0xaf, 0xee, 0xea, 0x99, 0xb1, 0x1d, 0xaf,
0xb4, 0x87, 0xdc, 0xaa, 0xdf, 0x7b, 0xf5, 0xde, 0xab, 0xdf, 0xab, 0xf7, 0x51, 0x0d, 0xed, 0x29,
0x66, 0x9c, 0x64, 0xbb, 0x69, 0x96, 0xf0, 0x04, 0x35, 0xd5, 0x97, 0x9f, 0x4e, 0xdc, 0x3f, 0xd5,
0xa1, 0xf9, 0x73, 0x82, 0x33, 0x3e, 0x21, 0x98, 0xa3, 0x2e, 0x54, 0x68, 0x3a, 0x70, 0x46, 0xce,
0x4e, 0xd3, 0xab, 0xd0, 0x14, 0x21, 0xa8, 0xa5, 0x49, 0xc6, 0x07, 0x95, 0x91, 0xb3, 0xd3, 0xf1,
0xe4, 0x1a, 0xdd, 0x06, 0x48, 0x67, 0x93, 0x88, 0x06, 0xfe, 0x2c, 0x8b, 0x06, 0x55, 0x29, 0xdb,
0x54, 0x94, 0x5f, 0x64, 0x11, 0xda, 0x81, 0xde, 0x14, 0x9f, 0xfb, 0x67, 0x49, 0x34, 0x9b, 0x12,
0x3f, 0x48, 0x66, 0x31, 0x1f, 0xd4, 0xe4, 0xf6, 0xee, 0x14, 0x9f, 0xbf, 0x96, 0xe4, 0x3d, 0x41,
0x45, 0x23, 0xe1, 0xd5, 0xb9, 0x7f, 0x44, 0x23, 0xe2, 0x9f, 0x92, 0xf9, 0x60, 0x6d, 0xe4, 0xec,
0xd4, 0x3c, 0x98, 0xe2, 0xf3, 0xcf, 0x69, 0x44, 0x9e, 0x92, 0x39, 0xba, 0x0b, 0xad, 0x10, 0x73,
0xec, 0x07, 0x24, 0xe6, 0x24, 0x1b, 0xd4, 0xa5, 0x2d, 0x10, 0xa4, 0x3d, 0x49, 0x11, 0xfe, 0x65,
0x38, 0x38, 0x1d, 0xac, 0x4b, 0x8e, 0x5c, 0x0b, 0xff, 0x70, 0x38, 0xa5, 0xb1, 0x2f, 0x3d, 0x6f,
0x48, 0xd3, 0x4d, 0x49, 0x39, 0x14, 0xee, 0xff, 0x0c, 0xd6, 0x95, 0x6f, 0x6c, 0xd0, 0x1c, 0x55,
0x77, 0x5a, 0x0f, 0x3f, 0xd8, 0xcd, 0xd1, 0xd8, 0x55, 0xee, 0x1d, 0xc4, 0x47, 0x49, 0x36, 0xc5,
0x9c, 0x26, 0xf1, 0x73, 0xc2, 0x18, 0x3e, 0x26, 0x9e, 0xd9, 0x83, 0x0e, 0xa0, 0x15, 0x93, 0x37,
0xbe, 0x51, 0x01, 0x52, 0xc5, 0xce, 0x92, 0x8a, 0xf1, 0x49, 0x92, 0xf1, 0x15, 0x7a, 0x20, 0x26,
0x6f, 0x5e, 0x6b, 0x55, 0x2f, 0x61, 0x23, 0x24, 0x11, 0xe1, 0x24, 0xcc, 0xd5, 0xb5, 0xae, 0xa9,
0xae, 0xab, 0x15, 0x18, 0x95, 0xdf, 0x85, 0xee, 0x09, 0x66, 0x7e, 0x9c, 0xe4, 0x1a, 0xdb, 0x23,
0x67, 0xa7, 0xe1, 0xb5, 0x4f, 0x30, 0x7b, 0x91, 0x18, 0xa9, 0x2f, 0xa0, 0x49, 0x02, 0x9f, 0x9d,
0xe0, 0x2c, 0x64, 0x83, 0x9e, 0x34, 0xf9, 0x60, 0xc9, 0xe4, 0x7e, 0x30, 0x16, 0x02, 0x2b, 0x8c,
0x36, 0x88, 0x62, 0x31, 0xf4, 0x02, 0x3a, 0x02, 0x8c, 0x42, 0x59, 0xff, 0xda, 0xca, 0x04, 0x9a,
0xfb, 0x46, 0xdf, 0x6b, 0xe8, 0x1b, 0x44, 0x0a, 0x9d, 0xe8, 0xda, 0x3a, 0x0d, 0xac, 0xb9, 0xde,
0x0f, 0xa1, 0xa7, 0x61, 0x29, 0xd4, 0x6e, 0x4a, 0x60, 0x3a, 0x12, 0x18, 0x23, 0xe8, 0xfe, 0xdd,
0x81, 0x7e, 0x9e, 0x0d, 0x1e, 0x61, 0x69, 0x12, 0x33, 0x82, 0x1e, 0x40, 0x5f, 0x5f, 0x67, 0x46,
0xbf, 0x22, 0x7e, 0x44, 0xa7, 0x94, 0xcb, 0x24, 0xa9, 0x79, 0x1b, 0x8a, 0x31, 0xa6, 0x5f, 0x91,
0x67, 0x82, 0x8c, 0xb6, 0xa1, 0x1e, 0x11, 0x1c, 0x92, 0x4c, 0xe6, 0x4c, 0xd3, 0xd3, 0x5f, 0xe8,
0x43, 0xd8, 0x98, 0x12, 0x9e, 0xd1, 0x80, 0xf9, 0x38, 0x0c, 0x33, 0xc2, 0x98, 0x4e, 0x9d, 0xae,
0x26, 0x3f, 0x52, 0x54, 0xf4, 0x63, 0x18, 0x18, 0x41, 0x2a, 0xee, 0xf8, 0x19, 0x8e, 0x7c, 0x46,
0x82, 0x24, 0x0e, 0x99, 0xce, 0xa3, 0x6d, 0xcd, 0x3f, 0xd0, 0xec, 0xb1, 0xe2, 0xba, 0x7f, 0xad,
0xc2, 0xe0, 0xa2, 0x0b, 0x2c, 0x33, 0x3b, 0x94, 0x4e, 0x77, 0xbc, 0x0a, 0x0d, 0x45, 0xe6, 0x88,
0xc3, 0x48, 0x2f, 0x6b, 0x9e, 0x5c, 0xa3, 0x3b, 0x00, 0x41, 0x12, 0x45, 0x24, 0x10, 0x1b, 0xb5,
0x7b, 0x16, 0x45, 0x64, 0x96, 0x4c, 0xd6, 0x22, 0xa9, 0x6b, 0x5e, 0x53, 0x50, 0x54, 0x3e, 0xdf,
0x83, 0xb6, 0x02, 0x5e, 0x0b, 0xa8, 0x7c, 0x6e, 0x29, 0x9a, 0x12, 0xf9, 0x08, 0x90, 0x09, 0xf0,
0x64, 0x9e, 0x0b, 0xd6, 0xa5, 0x60, 0x4f, 0x73, 0x1e, 0xcf, 0x8d, 0xf4, 0xfb, 0xd0, 0xcc, 0x08,
0x0e, 0xfd, 0x24, 0x8e, 0xe6, 0x32, 0xc5, 0x1b, 0x5e, 0x43, 0x10, 0xbe, 0x8c, 0xa3, 0x39, 0xfa,
0x1e, 0xf4, 0x33, 0x92, 0x46, 0x34, 0xc0, 0x7e, 0x1a, 0xe1, 0x80, 0x4c, 0x49, 0x6c, 0xb2, 0xbd,
0xa7, 0x19, 0x87, 0x86, 0x8e, 0x06, 0xb0, 0x7e, 0x46, 0x32, 0x26, 0x8e, 0xd5, 0x94, 0x22, 0xe6,
0x13, 0xf5, 0xa0, 0xca, 0x79, 0x34, 0x00, 0x49, 0x15, 0x4b, 0x74, 0x1f, 0x7a, 0x41, 0x32, 0x4d,
0x71, 0xc0, 0xfd, 0x8c, 0x9c, 0x51, 0xb9, 0xa9, 0x25, 0xd9, 0x1b, 0x9a, 0xee, 0x69, 0xb2, 0x38,
0xce, 0x34, 0x09, 0xe9, 0x11, 0x25, 0xa1, 0x8f, 0xb9, 0x0e, 0x93, 0x4c, 0xb9, 0xaa, 0xd7, 0x33,
0x9c, 0x47, 0x5c, 0x05, 0xc8, 0xfd, 0x9b, 0x03, 0xb7, 0x2f, 0x4d, 0xe7, 0xa5, 0x20, 0x5d, 0x15,
0x90, 0x6f, 0x0b, 0x03, 0x77, 0x06, 0x77, 0xaf, 0x48, 0xb2, 0x2b, 0x7c, 0xad, 0x2c, 0xf9, 0xea,
0x42, 0x87, 0x04, 0x3e, 0x8d, 0x43, 0x72, 0xee, 0x4f, 0x28, 0x57, 0xd7, 0xbf, 0xe3, 0xb5, 0x48,
0x70, 0x20, 0x68, 0x8f, 0x29, 0x67, 0xee, 0x3a, 0xac, 0xed, 0x4f, 0x53, 0x3e, 0x77, 0xff, 0xe1,
0xc0, 0xc6, 0x78, 0x96, 0x92, 0xec, 0x71, 0x94, 0x04, 0xa7, 0xfb, 0xe7, 0x3c, 0xc3, 0xe8, 0x4b,
0xe8, 0x92, 0x0c, 0xb3, 0x59, 0x26, 0xae, 0x4d, 0x48, 0xe3, 0x63, 0x69, 0xbc, 0x5c, 0x2d, 0x17,
0xf6, 0xec, 0xee, 0xab, 0x0d, 0x7b, 0x52, 0xde, 0xeb, 0x10, 0xfb, 0x73, 0xf8, 0x2b, 0xe8, 0x94,
0xf8, 0x22, 0x27, 0x44, 0x6f, 0xd1, 0x87, 0x92, 0x6b, 0x91, 0xcf, 0x29, 0xce, 0x28, 0x9f, 0xeb,
0x1e, 0xa8, 0xbf, 0x44, 0x2e, 0xe8, 0x9a, 0x40, 0x43, 0x71, 0x96, 0xaa, 0xe8, 0x32, 0x8a, 0x72,
0x10, 0x32, 0xf7, 0x3e, 0x6c, 0xee, 0x45, 0x94, 0xc4, 0xfc, 0x19, 0x65, 0x9c, 0xc4, 0x1e, 0xf9,
0xed, 0x8c, 0x30, 0x2e, 0x2c, 0xc4, 0x78, 0x4a, 0x74, 0x87, 0x95, 0x6b, 0xf7, 0xf7, 0xd0, 0x55,
0x58, 0x3f, 0x4b, 0x02, 0x89, 0xb0, 0x88, 0x87, 0x68, 0xad, 0x4a, 0x48, 0x2c, 0x17, 0x7a, 0x6e,
0x65, 0xb1, 0xe7, 0xde, 0x82, 0x86, 0x6c, 0x4a, 0x85, 0x2b, 0xeb, 0xa2, 0xcf, 0xd0, 0x90, 0x15,
0x49, 0x19, 0x2a, 0x76, 0x4d, 0xb2, 0x5b, 0xa6, 0x6f, 0xd0, 0x90, 0xb9, 0xaf, 0x60, 0xf3, 0x59,
0x92, 0x9c, 0xce, 0x52, 0xe5, 0x86, 0xf1, 0xb5, 0x7c, 0x42, 0x67, 0x54, 0x15, 0x36, 0xf3, 0x13,
0x5e, 0x15, 0x6f, 0xf7, 0xbf, 0x0e, 0x6c, 0x95, 0xd5, 0xea, 0x6a, 0xfa, 0x1b, 0xd8, 0xcc, 0xf5,
0xfa, 0x91, 0x3e, 0xb3, 0x32, 0xd0, 0x7a, 0xf8, 0xb1, 0x15, 0xcc, 0x55, 0xbb, 0x4d, 0x87, 0x0e,
0x0d, 0x58, 0x5e, 0xff, 0x6c, 0x81, 0xc2, 0x86, 0xe7, 0xd0, 0x5b, 0x14, 0x13, 0xb5, 0x24, 0xb7,
0xaa, 0x91, 0x6d, 0x98, 0x9d, 0xe8, 0x87, 0xd0, 0x2c, 0x1c, 0xa9, 0x48, 0x47, 0x36, 0x4b, 0x8e,
0x68, 0x5b, 0x85, 0x14, 0xda, 0x82, 0x35, 0x92, 0x65, 0x49, 0xa6, 0xb3, 0x52, 0x7d, 0xb8, 0x3f,
0x81, 0xc6, 0x37, 0x8e, 0xa2, 0xfb, 0x2f, 0x07, 0x3a, 0x8f, 0x18, 0xa3, 0xc7, 0xf9, 0x75, 0xd9,
0x82, 0x35, 0x55, 0x21, 0x55, 0xb3, 0x51, 0x1f, 0x68, 0x04, 0x2d, 0x9d, 0xdc, 0x16, 0xf4, 0x36,
0xe9, 0xca, 0xba, 0xa1, 0x13, 0xbe, 0xa6, 0x5c, 0x13, 0x45, 0x6f, 0x61, 0xd2, 0x5a, 0xbb, 0x70,
0xd2, 0xaa, 0x5b, 0x93, 0xd6, 0xfb, 0xd0, 0x94, 0x9b, 0xe2, 0x24, 0x24, 0x7a, 0x04, 0x6b, 0x08,
0xc2, 0x8b, 0x24, 0x24, 0xee, 0x5f, 0x1c, 0xe8, 0x9a, 0xd3, 0xe8, 0xc8, 0xf7, 0xa0, 0x7a, 0x94,
0xa3, 0x2f, 0x96, 0x06, 0xa3, 0xca, 0x45, 0x18, 0x2d, 0x4d, 0x97, 0x39, 0x22, 0x35, 0x1b, 0x91,
0x3c, 0x18, 0x6b, 0x56, 0x30, 0x84, 0xcb, 0x78, 0xc6, 0x4f, 0x8c, 0xcb, 0x62, 0xed, 0x1e, 0x43,
0x7f, 0xcc, 0x31, 0xa7, 0x8c, 0xd3, 0x80, 0x19, 0x98, 0x17, 0x00, 0x75, 0xae, 0x02, 0xb4, 0x72,
0x11, 0xa0, 0xd5, 0x1c, 0x50, 0xf7, 0x9f, 0x0e, 0x20, 0xdb, 0x92, 0x86, 0xe0, 0x5b, 0x30, 0x25,
0x20, 0xe3, 0x09, 0x17, 0x63, 0x82, 0x68, 0xe8, 0xba, 0x2d, 0x4b, 0x8a, 0x18, 0x4b, 0x44, 0x94,
0x66, 0x8c, 0x84, 0x8a, 0xab, 0x7a, 0x72, 0x43, 0x10, 0x24, 0xb3, 0xdc, 0xd2, 0xeb, 0x0b, 0x2d,
0xdd, 0x7d, 0x04, 0xad, 0x31, 0x4f, 0x32, 0x7c, 0x4c, 0x5e, 0xcd, 0xd3, 0xb7, 0xf1, 0x5e, 0x7b,
0x57, 0x29, 0x80, 0x18, 0x01, 0xec, 0x15, 0xde, 0xaf, 0x2a, 0x80, 0xbf, 0x83, 0x9b, 0x85, 0x84,
0xa8, 0x97, 0x26, 0x2e, 0x9f, 0xc2, 0x36, 0x8d, 0x83, 0x68, 0x16, 0x12, 0x3f, 0x16, 0xed, 0x27,
0xca, 0xa7, 0x5a, 0x47, 0x0e, 0x03, 0x5b, 0x9a, 0xfb, 0x42, 0x32, 0xcd, 0x74, 0xfb, 0x11, 0x20,
0xb3, 0x8b, 0x04, 0xf9, 0x8e, 0x8a, 0xdc, 0xd1, 0xd3, 0x9c, 0xfd, 0x40, 0x4b, 0xbb, 0x2f, 0x61,
0x7b, 0xd1, 0xb8, 0x0e, 0xd5, 0x8f, 0xa0, 0x55, 0xc0, 0x6e, 0xea, 0xd3, 0x4d, 0xab, 0x2c, 0x14,
0xfb, 0x3c, 0x5b, 0xd2, 0xfd, 0x3e, 0xbc, 0x57, 0xb0, 0x9e, 0xc8, 0x42, 0x7b, 0x59, 0xfd, 0x1f,
0xc2, 0x60, 0x59, 0x5c, 0xf9, 0xe0, 0xfe, 0xa7, 0x02, 0xed, 0x27, 0x3a, 0xa3, 0x44, 0x0f, 0xb6,
0xba, 0x6e, 0x53, 0x76, 0xdd, 0x7b, 0xd0, 0x2e, 0xbd, 0xb4, 0xd4, 0x38, 0xd7, 0x3a, 0xb3, 0x9e,
0x59, 0xab, 0x1e, 0x64, 0x55, 0x29, 0xb6, 0xf8, 0x20, 0x7b, 0x00, 0xfd, 0xa3, 0x8c, 0x90, 0xe5,
0xb7, 0x5b, 0xcd, 0xdb, 0x10, 0x0c, 0x5b, 0x76, 0x17, 0x36, 0x71, 0xc0, 0xe9, 0xd9, 0x82, 0xb4,
0xba, 0x5f, 0x7d, 0xc5, 0xb2, 0xe5, 0x3f, 0xcf, 0x1d, 0xa5, 0xf1, 0x51, 0xc2, 0x06, 0xf5, 0xb7,
0x7f, 0x7b, 0xe9, 0xd3, 0x08, 0x0e, 0x43, 0x87, 0xd0, 0x35, 0x33, 0xbc, 0xd6, 0xb4, 0x7e, 0xed,
0xf7, 0x41, 0x9b, 0x14, 0x2c, 0xe6, 0xfe, 0xb1, 0x02, 0x0d, 0x0f, 0x07, 0xa7, 0xef, 0x36, 0xbe,
0x9f, 0xc1, 0x46, 0x5e, 0x8b, 0x4b, 0x10, 0xbf, 0x67, 0x01, 0x63, 0x5f, 0x25, 0xaf, 0x13, 0x5a,
0x5f, 0xcc, 0xfd, 0xbf, 0x03, 0xdd, 0x27, 0x79, 0xbd, 0x7f, 0xb7, 0xc1, 0x78, 0x08, 0x20, 0x1a,
0x54, 0x09, 0x07, 0xbb, 0xa1, 0x9b, 0x70, 0x7b, 0xcd, 0x4c, 0xaf, 0x98, 0xfb, 0xe7, 0x0a, 0xb4,
0x5f, 0x25, 0x69, 0x12, 0x25, 0xc7, 0xf3, 0x77, 0xfb, 0xf4, 0xfb, 0xd0, 0xb7, 0x7a, 0x79, 0x09,
0x84, 0x5b, 0x0b, 0x97, 0xa1, 0x08, 0xb6, 0xb7, 0x11, 0x96, 0xbe, 0x99, 0xbb, 0x09, 0x7d, 0x3d,
0x97, 0x16, 0x25, 0xd9, 0xfd, 0x83, 0x03, 0xc8, 0xa6, 0xea, 0x5a, 0xf9, 0x53, 0xe8, 0x70, 0x8d,
0x9d, 0xb4, 0xa7, 0x47, 0x73, 0xfb, 0xee, 0xd9, 0xd8, 0x7a, 0x6d, 0x6e, 0x23, 0xfd, 0x03, 0xd8,
0x5a, 0x7a, 0x5f, 0xfb, 0xd3, 0x89, 0x46, 0xb8, 0xbf, 0xf0, 0xc4, 0x7e, 0x3e, 0x71, 0x3f, 0x85,
0x9b, 0x6a, 0x38, 0x34, 0x75, 0xdc, 0xd4, 0xd7, 0xa5, 0x29, 0xaf, 0x53, 0x4c, 0x79, 0xee, 0xff,
0x1c, 0xd8, 0x5e, 0xdc, 0xa6, 0xfd, 0xbf, 0x6c, 0x1f, 0xc2, 0x80, 0x74, 0xbd, 0xb1, 0xe7, 0x55,
0x35, 0x26, 0x7e, 0xb2, 0x34, 0xaf, 0x2e, 0xea, 0xde, 0x35, 0x75, 0xa8, 0x18, 0x59, 0x7b, 0xac,
0x4c, 0x60, 0x43, 0x0c, 0xfd, 0x25, 0x31, 0x31, 0xd5, 0x1b, 0xbb, 0xda, 0xa7, 0x75, 0xbd, 0xf1,
0x1b, 0x0c, 0xac, 0xee, 0x5d, 0xb8, 0xfd, 0x05, 0xe1, 0xcf, 0xa5, 0xcc, 0x5e, 0x12, 0x1f, 0xd1,
0xe3, 0x59, 0xa6, 0x84, 0x8a, 0xd0, 0xde, 0xb9, 0x48, 0x42, 0xc3, 0xb4, 0xe2, 0x27, 0x86, 0x73,
0xed, 0x9f, 0x18, 0x95, 0xcb, 0x7e, 0x62, 0x3c, 0xfc, 0x77, 0x1d, 0xd6, 0xc7, 0x04, 0xbf, 0x21,
0x24, 0x44, 0x07, 0xd0, 0x19, 0x93, 0x38, 0x2c, 0x7e, 0x4f, 0x6e, 0x59, 0x67, 0xcc, 0xa9, 0xc3,
0xef, 0xac, 0xa2, 0xe6, 0x2d, 0xf4, 0xc6, 0x8e, 0xf3, 0xb1, 0x83, 0x0e, 0xa1, 0xf3, 0x94, 0x90,
0x74, 0x2f, 0x89, 0x63, 0x12, 0x70, 0x12, 0xa2, 0x3b, 0x76, 0x23, 0x5f, 0x7e, 0xa9, 0x0d, 0x6f,
0x2d, 0xf5, 0x13, 0x03, 0xaa, 0xd6, 0xf8, 0x12, 0xda, 0xf6, 0x03, 0xa5, 0xa4, 0x70, 0xc5, 0x73,
0x6a, 0x78, 0xf7, 0x8a, 0x97, 0x8d, 0x7b, 0x03, 0x7d, 0x06, 0x75, 0x35, 0x31, 0xa3, 0x81, 0x25,
0x5c, 0x7a, 0x12, 0x94, 0xfc, 0x2a, 0x8f, 0xd7, 0xee, 0x0d, 0xf4, 0x14, 0xa0, 0x98, 0x39, 0x91,
0x8d, 0xcb, 0xd2, 0xd0, 0x3b, 0xbc, 0x7d, 0x01, 0x37, 0x57, 0xf6, 0x4b, 0xe8, 0x96, 0x27, 0x23,
0x34, 0x5a, 0x39, 0xfc, 0x58, 0xe5, 0x61, 0x78, 0xef, 0x12, 0x89, 0x5c, 0xf1, 0xaf, 0xa1, 0xb7,
0x38, 0xf0, 0x20, 0x77, 0xe5, 0xc6, 0xd2, 0xf0, 0x34, 0xfc, 0xe0, 0x52, 0x19, 0x1b, 0x84, 0xa2,
0x42, 0x95, 0x40, 0x58, 0x2a, 0x67, 0x25, 0x10, 0x96, 0xcb, 0x9a, 0x02, 0xa1, 0x9c, 0xd6, 0x25,
0x10, 0x56, 0x16, 0xa1, 0x12, 0x08, 0xab, 0x6b, 0x82, 0x7b, 0x03, 0x25, 0xb0, 0xbd, 0x3a, 0xd9,
0x90, 0xfd, 0x3f, 0xe3, 0xd2, 0x8c, 0x1d, 0xde, 0x7f, 0x0b, 0x49, 0x63, 0x70, 0x52, 0x97, 0xbf,
0xfe, 0x3f, 0xf9, 0x3a, 0x00, 0x00, 0xff, 0xff, 0x28, 0x1f, 0x4c, 0x0e, 0x0a, 0x18, 0x00, 0x00,
}

42
weed/server/filer_server.go

@ -1,9 +1,14 @@
package weed_server
import (
"context"
"fmt"
"net/http"
"os"
"time"
"github.com/chrislusf/seaweedfs/weed/operation"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
"github.com/chrislusf/seaweedfs/weed/stats"
"github.com/chrislusf/seaweedfs/weed/util"
"google.golang.org/grpc"
@ -37,8 +42,6 @@ type FilerOption struct {
DataCenter string
DefaultLevelDbDir string
DisableHttp bool
MetricsAddress string
MetricsIntervalSec int
Port int
}
@ -87,10 +90,41 @@ func NewFilerServer(defaultMux, readonlyMux *http.ServeMux, option *FilerOption)
readonlyMux.HandleFunc("/", fs.readonlyFilerHandler)
}
maybeStartMetrics(fs, option)
return fs, nil
}
func maybeStartMetrics(fs *FilerServer, option *FilerOption) {
isConnected := false
var metricsAddress string
var metricsIntervalSec int
var readErr error
for !isConnected {
metricsAddress, metricsIntervalSec, readErr = readFilerConfiguration(fs.grpcDialOption, option.Masters[0])
if readErr == nil {
isConnected = true
}else{
time.Sleep(7 * time.Second)
}
}
if metricsAddress == "" && metricsIntervalSec <= 0 {
return
}
go stats.LoopPushingMetric("filer", stats.SourceName(option.Port), stats.FilerGather,
func() (addr string, intervalSeconds int) {
return option.MetricsAddress, option.MetricsIntervalSec
return metricsAddress, metricsIntervalSec
})
}
return fs, nil
func readFilerConfiguration(grpcDialOption grpc.DialOption, masterGrpcAddress string) (metricsAddress string, metricsIntervalSec int, err error) {
err = operation.WithMasterServerClient(masterGrpcAddress, grpcDialOption, func(masterClient master_pb.SeaweedClient) error {
resp, err := masterClient.GetMasterConfiguration(context.Background(), &master_pb.GetMasterConfigurationRequest{})
if err != nil {
return fmt.Errorf("get master %s configuration: %v", masterGrpcAddress, err)
}
metricsAddress, metricsIntervalSec = resp.MetricsAddress, int(resp.MetricsIntervalSeconds)
return nil
})
return
}

10
weed/server/master_grpc_server_volume.go

@ -174,3 +174,13 @@ func (ms *MasterServer) LookupEcVolume(ctx context.Context, req *master_pb.Looku
return resp, nil
}
func (ms *MasterServer) GetMasterConfiguration(ctx context.Context, req *master_pb.GetMasterConfigurationRequest) (*master_pb.GetMasterConfigurationResponse, error) {
resp := &master_pb.GetMasterConfigurationResponse{
MetricsAddress: ms.option.MetricsAddress,
MetricsIntervalSeconds: uint32(ms.option.MetricsIntervalSec),
}
return resp, nil
}

4
weed/stats/metrics.go

@ -107,6 +107,10 @@ func init() {
func LoopPushingMetric(name, instance string, gatherer *prometheus.Registry, fnGetMetricsDest func() (addr string, intervalSeconds int)) {
if fnGetMetricsDest == nil {
return
}
addr, intervalSeconds := fnGetMetricsDest()
pusher := push.New(addr, name).Gatherer(gatherer).Grouping("instance", instance)
currentAddr := addr

Loading…
Cancel
Save