blob: 62d68ea8d1b1a75579773f7b1a725e1f9ee19797 [file] [log] [blame]
Serge Bazanski8bdee5b2018-10-25 12:05:51 +01001package main
2
3import (
4 "context"
5
6 "github.com/golang/glog"
7 "google.golang.org/grpc/codes"
8 "google.golang.org/grpc/status"
9
10 pb "code.hackerspace.pl/q3k/arista-proxy/proto"
11)
12
13func (s *server) ShowVersion(ctx context.Context, req *pb.ShowVersionRequest) (*pb.ShowVersionResponse, error) {
14 var version []struct {
15 ModelName string `json:"modelName"`
16 InternalVersion string `json:"internalVersion"`
17 SystemMacAddress string `json:"systemMacAddress"`
18 SerialNumber string `json:"serialNumber"`
19 MemTotal int64 `json:"memTotal"`
20 BootupTimestamp float64 `json:"bootupTimestamp"`
21 MemFree int64 `json:"memFree"`
22 Version string `json:"version"`
23 Architecture string `json:"architecture"`
24 InternalBuildId string `json:"internalBuildId"`
25 HardwareRevision string `json:"hardwareRevision"`
26 }
27
28 err := s.arista.structuredCall(&version, "show version")
29 if err != nil {
30 glog.Errorf("EOS Capi: show version: %v", err)
31 return nil, status.Error(codes.Unavailable, "EOS Capi call failed")
32 }
33
34 if len(version) != 1 {
35 glog.Errorf("Expected 1-length result, got %d", len(version))
36 return nil, status.Error(codes.Internal, "Internal error")
37 }
38
39 d := version[0]
40
41 return &pb.ShowVersionResponse{
42 ModelName: d.ModelName,
43 InternalVersion: d.InternalVersion,
44 SystemMacAddress: d.SystemMacAddress,
45 SerialNumber: d.SerialNumber,
46 MemTotal: d.MemTotal,
47 BootupTimestamp: d.BootupTimestamp,
48 MemFree: d.MemFree,
49 Version: d.Version,
50 Architecture: d.Architecture,
51 InternalBuildId: d.InternalBuildId,
52 HardwareRevision: d.HardwareRevision,
53 }, nil
54}
55
56type temperatureSensor struct {
57 InAlertState bool `json:"inAlertState"`
58 MaxTemperature float64 `json:"maxTemperature"`
59 RelPos int64 `json:"relPos"`
60 Description string `json:"description"`
61 Name string `json:"name"`
62 AlertCount int64 `json:"alertCount"`
63 CurrentTemperature float64 `json:"currentTemperature"`
64 OverheatThreshold float64 `json:"overheatThreshold"`
65 CriticalThreshold float64 `json:"criticalThreshold"`
66 HwStatus string `json:"hwStatus"`
67}
68
69func (s *server) ShowEnvironmentTemperature(ctx context.Context, req *pb.ShowEnvironmentTemperatureRequest) (*pb.ShowEnvironmentTemperatureResponse, error) {
70 var response []struct {
71 PowerSuppplySlots []struct {
72 TempSensors []temperatureSensor `json:"tempSensors"`
73 EntPhysicalClass string `json:"entPhysicalClass"`
74 RelPos int64 `json:"relPos"`
75 } `json:"powerSupplySlots"`
76
77 ShutdownOnOverheat bool `json:"shutdownOnOverheat"`
78 TempSensors []temperatureSensor `json:"tempSensors"`
79 SystemStatus string `json:"systemStatus"`
80 }
81
82 err := s.arista.structuredCall(&response, "show environment temperature")
83 if err != nil {
84 glog.Errorf("EOS Capi: show environment temperature: %v", err)
85 return nil, status.Error(codes.Unavailable, "EOS Capi call failed")
86 }
87
88 if len(response) != 1 {
89 glog.Errorf("Expected 1-length result, got %d", len(response))
90 return nil, status.Error(codes.Internal, "Internal error")
91 }
92
93 d := response[0]
94 glog.Infof("%+v", d)
95
96 return &pb.ShowEnvironmentTemperatureResponse{}, nil
97}