Skip to content

Commit

Permalink
Create and close connection using sftp client interface
Browse files Browse the repository at this point in the history
  • Loading branch information
arunvelsriram committed May 14, 2021
1 parent 03ef0de commit 7fffd66
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 96 deletions.
12 changes: 5 additions & 7 deletions pkg/collector/sftp_collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
log "github.com/sirupsen/logrus"

"github.com/arunvelsriram/sftp-exporter/pkg/client"
"github.com/arunvelsriram/sftp-exporter/pkg/config"
c "github.com/arunvelsriram/sftp-exporter/pkg/constants"
"github.com/prometheus/client_golang/prometheus"
)
Expand Down Expand Up @@ -49,10 +48,9 @@ var (
)
)

type CreateClientFn func(config.Config) (client.SFTPClient, error)

type SFTPCollector struct {
sftpService service.SFTPService
sftpClient client.SFTPClient
}

func (s SFTPCollector) Describe(ch chan<- *prometheus.Desc) {
Expand All @@ -64,12 +62,12 @@ func (s SFTPCollector) Describe(ch chan<- *prometheus.Desc) {
}

func (s SFTPCollector) Collect(ch chan<- prometheus.Metric) {
if err := s.sftpService.Connect(); err != nil {
if err := s.sftpClient.Connect(); err != nil {
ch <- prometheus.MustNewConstMetric(up, prometheus.GaugeValue, 0)
log.WithField("when", "collecting up metric").Error(err)
return
}
defer s.sftpService.Close()
defer s.sftpClient.Close()
ch <- prometheus.MustNewConstMetric(up, prometheus.GaugeValue, 1)

fsStats := s.sftpService.FSStats()
Expand All @@ -85,6 +83,6 @@ func (s SFTPCollector) Collect(ch chan<- prometheus.Metric) {
}
}

func NewSFTPCollector(s service.SFTPService) prometheus.Collector {
return SFTPCollector{sftpService: s}
func NewSFTPCollector(s service.SFTPService, c client.SFTPClient) prometheus.Collector {
return SFTPCollector{sftpService: s, sftpClient: c}
}
26 changes: 14 additions & 12 deletions pkg/collector/sftp_collector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ type SFTPCollectorSuite struct {
suite.Suite
ctrl *gomock.Controller
sftpService *mocks.MockSFTPService
sftpClient *mocks.MockSFTPClient
collector prometheus.Collector
}

Expand All @@ -27,7 +28,8 @@ func TestSFTPCollectorSuite(t *testing.T) {
func (s *SFTPCollectorSuite) SetupTest() {
s.ctrl = gomock.NewController(s.T())
s.sftpService = mocks.NewMockSFTPService(s.ctrl)
s.collector = NewSFTPCollector(s.sftpService)
s.sftpClient = mocks.NewMockSFTPClient(s.ctrl)
s.collector = NewSFTPCollector(s.sftpService, s.sftpClient)
}

func (s *SFTPCollectorSuite) TearDownTest() {
Expand Down Expand Up @@ -72,10 +74,10 @@ func (s *SFTPCollectorSuite) TestSFTPCollectorDescribe() {
}

func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldWriteUpMetric() {
s.sftpService.EXPECT().Connect().Return(nil)
s.sftpClient.EXPECT().Connect().Return(nil)
s.sftpService.EXPECT().FSStats()
s.sftpService.EXPECT().ObjectStats()
s.sftpService.EXPECT().Close()
s.sftpClient.EXPECT().Close()
ch := make(chan prometheus.Metric)
done := make(chan bool)

Expand All @@ -96,7 +98,7 @@ func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldWriteUpMetric() {
}

func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldWriteUpMetricAndReturnIfClientCreationFails() {
s.sftpService.EXPECT().Connect().Return(fmt.Errorf("failed to connect to SFTP"))
s.sftpClient.EXPECT().Connect().Return(fmt.Errorf("failed to connect to SFTP"))
ch := make(chan prometheus.Metric)
done := make(chan bool)

Expand Down Expand Up @@ -129,10 +131,10 @@ func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldWriteFSStats() {
FreeSpace: 4444.44,
},
})
s.sftpService.EXPECT().Connect().Return(nil)
s.sftpClient.EXPECT().Connect().Return(nil)
s.sftpService.EXPECT().FSStats().Return(fsStats)
s.sftpService.EXPECT().ObjectStats()
s.sftpService.EXPECT().Close()
s.sftpClient.EXPECT().Close()
ch := make(chan prometheus.Metric)
done := make(chan bool)

Expand Down Expand Up @@ -185,10 +187,10 @@ func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldWriteFSStats() {
}

func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldNotWriteFSStatsForEmpty() {
s.sftpService.EXPECT().Connect().Return(nil)
s.sftpClient.EXPECT().Connect().Return(nil)
s.sftpService.EXPECT().FSStats().Return(model.FSStats([]model.FSStat{}))
s.sftpService.EXPECT().ObjectStats()
s.sftpService.EXPECT().Close()
s.sftpClient.EXPECT().Close()
ch := make(chan prometheus.Metric)
done := make(chan bool)

Expand Down Expand Up @@ -216,10 +218,10 @@ func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldWriteObjectStats() {
ObjectSize: 2222.22,
},
})
s.sftpService.EXPECT().Connect().Return(nil)
s.sftpClient.EXPECT().Connect().Return(nil)
s.sftpService.EXPECT().FSStats()
s.sftpService.EXPECT().ObjectStats().Return(objectStats)
s.sftpService.EXPECT().Close()
s.sftpClient.EXPECT().Close()
ch := make(chan prometheus.Metric)
done := make(chan bool)

Expand Down Expand Up @@ -272,10 +274,10 @@ func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldWriteObjectStats() {
}

func (s *SFTPCollectorSuite) TestSFTPCollectorCollectShouldNotWriteObjectStatsForEmpty() {
s.sftpService.EXPECT().Connect().Return(nil)
s.sftpClient.EXPECT().Connect().Return(nil)
s.sftpService.EXPECT().FSStats()
s.sftpService.EXPECT().ObjectStats().Return(model.ObjectStats(model.ObjectStats{}))
s.sftpService.EXPECT().Close()
s.sftpClient.EXPECT().Close()
ch := make(chan prometheus.Metric)
done := make(chan bool)

Expand Down
28 changes: 0 additions & 28 deletions pkg/internal/mocks/sftp_service.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pkg/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
func Start() error {
sftpClient := client.NewSFTPClient()
sftpService := service.NewSFTPService(config.NewConfig(), sftpClient)
sftpCollector := collector.NewSFTPCollector(sftpService)
sftpCollector := collector.NewSFTPCollector(sftpService, sftpClient)
prometheus.MustRegister(sftpCollector)

r := http.NewServeMux()
Expand Down
16 changes: 0 additions & 16 deletions pkg/service/sftp_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import (

type (
SFTPService interface {
Connect() error
Close() error
FSStats() model.FSStats
ObjectStats() model.ObjectStats
}
Expand All @@ -21,20 +19,6 @@ type (
}
)

func (s sftpService) Connect() error {
if err := s.sftpClient.Connect(); err != nil {
return err
}
return nil
}

func (s sftpService) Close() error {
if err := s.sftpClient.Close(); err != nil {
return err
}
return nil
}

func (s sftpService) FSStats() model.FSStats {
paths := s.config.GetSFTPPaths()
fsStats := make([]model.FSStat, 0)
Expand Down
32 changes: 0 additions & 32 deletions pkg/service/sftp_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,38 +60,6 @@ func (s *SFTPServiceSuite) TearDownTest() {
s.ctrl.Finish()
}

func (s *SFTPServiceSuite) TestSFTPServiceConnect() {
s.sftpClient.EXPECT().Connect().Return(nil)

err := s.service.Connect()

s.NoError(err)
}

func (s *SFTPServiceSuite) TestSFTPServiceConnectShouldReturnErrIfClientConnectFails() {
s.sftpClient.EXPECT().Connect().Return(fmt.Errorf("failed to connect"))

err := s.service.Connect()

s.EqualError(err, "failed to connect")
}

func (s *SFTPServiceSuite) TestSFTPServiceClose() {
s.sftpClient.EXPECT().Close().Return(nil)

err := s.service.Close()

s.NoError(err)
}

func (s *SFTPServiceSuite) TestSFTPServiceCloseShouldReturnErrIfClosingConnectionFails() {
s.sftpClient.EXPECT().Close().Return(fmt.Errorf("failed to close"))

err := s.service.Close()

s.EqualError(err, "failed to close")
}

func (s *SFTPServiceSuite) TestSFTPServiceFSStats() {
s.config.EXPECT().GetSFTPPaths().Return([]string{"/path0", "/path1"})
s.sftpClient.EXPECT().StatVFS("/path0").Return(&sftp.StatVFS{
Expand Down

0 comments on commit 7fffd66

Please sign in to comment.