From 8b139ad15796cd9d537f7c687e96197feb8d5ff9 Mon Sep 17 00:00:00 2001 From: Jason Kulatunga Date: Mon, 21 Sep 2020 08:44:38 -0600 Subject: [PATCH] remove concurrency for collector, it causes issues on systems with lots of devices. Just retrieve the data in order for now (eventually we may do it in batches). --- collector/pkg/collector/metrics.go | 21 ++++++++++++--------- collector/pkg/detect/devices_linux_test.go | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 collector/pkg/detect/devices_linux_test.go diff --git a/collector/pkg/collector/metrics.go b/collector/pkg/collector/metrics.go index 6061cd5..693c807 100644 --- a/collector/pkg/collector/metrics.go +++ b/collector/pkg/collector/metrics.go @@ -13,7 +13,6 @@ import ( "os" "os/exec" "strings" - "sync" ) type MetricsCollector struct { @@ -71,16 +70,19 @@ func (mc *MetricsCollector) Run() error { return errors.ApiServerCommunicationError("An error occurred while retrieving filtered devices") } else { mc.logger.Debugln(deviceRespWrapper) - var wg sync.WaitGroup - + //var wg sync.WaitGroup for _, device := range deviceRespWrapper.Data { // execute collection in parallel go-routines - wg.Add(1) - go mc.Collect(&wg, device.WWN, device.DeviceName, device.DeviceType) + //wg.Add(1) + //go mc.Collect(&wg, device.WWN, device.DeviceName, device.DeviceType) + go mc.Collect(device.WWN, device.DeviceName, device.DeviceType) + + // TODO: we may need to sleep for between each call to smartctl -a + //time.Sleep(30 * time.Millisecond) } - mc.logger.Infoln("Main: Waiting for workers to finish") - wg.Wait() + //mc.logger.Infoln("Main: Waiting for workers to finish") + //wg.Wait() mc.logger.Infoln("Main: Completed") } @@ -98,8 +100,9 @@ func (mc *MetricsCollector) Validate() error { return nil } -func (mc *MetricsCollector) Collect(wg *sync.WaitGroup, deviceWWN string, deviceName string, deviceType string) { - defer wg.Done() +//func (mc *MetricsCollector) Collect(wg *sync.WaitGroup, deviceWWN string, deviceName string, deviceType string) { +func (mc *MetricsCollector) Collect(deviceWWN string, deviceName string, deviceType string) { + //defer wg.Done() mc.logger.Infof("Collecting smartctl results for %s\n", deviceName) args := []string{"-a", "-j"} diff --git a/collector/pkg/detect/devices_linux_test.go b/collector/pkg/detect/devices_linux_test.go new file mode 100644 index 0000000..94a6765 --- /dev/null +++ b/collector/pkg/detect/devices_linux_test.go @@ -0,0 +1,15 @@ +package detect_test + +import ( + "github.com/analogj/scrutiny/collector/pkg/detect" + "testing" +) + +func TestDevicePrefix(t *testing.T) { + //setup + + //test + + //assert + require.Equal(t, "/dev/", detect.DevicePrefix()) +}