@ -24,6 +24,8 @@ type Watcher interface {
OnAdd(cb Callback)
OnDelete(cb Callback)
OnReconnect(func())
EmitAdd(device *Device)
EmitDelete(device *Device)
}
type Callback func(device *Device)
@ -29,7 +29,7 @@ func (s *InMemoryStorage) Close() error {
func (s *InMemoryStorage) Save(device *Device) error {
s.db[key(device)] = device
s.emitAdd(device)
s.EmitAdd(device)
return nil
@ -72,6 +72,6 @@ func (s *InMemoryStorage) GetByPublicKey(publicKey string) (*Device, error) {
func (s *InMemoryStorage) Delete(device *Device) error {
delete(s.db, key(device))
s.emitDelete(device)
s.EmitDelete(device)
@ -24,13 +24,13 @@ func (w *InProcessWatcher) OnReconnect(cb func()) {
// noop because the inprocess watcher can't disconnect
func (w *InProcessWatcher) emitAdd(device *Device) {
func (w *InProcessWatcher) EmitAdd(device *Device) {
for _, cb := range w.add {
cb(device)
func (w *InProcessWatcher) emitDelete(device *Device) {
func (w *InProcessWatcher) EmitDelete(device *Device) {
for _, cb := range w.delete {
@ -59,3 +59,11 @@ func (w *PgWatcher) emit(cb Callback, event *pgevents.TableEvent) {
func (w *PgWatcher) EmitAdd(device *Device) {
// noop because we rely on postgres channels
func (w *PgWatcher) EmitDelete(device *Device) {
@ -143,6 +143,7 @@ func (s *SQLStorage) Save(device *Device) error {
if err := s.db.Save(&device).Error; err != nil {
return errors.Wrapf(err, "failed to write device")
s.Watcher.EmitAdd(device)
@ -182,5 +183,6 @@ func (s *SQLStorage) Delete(device *Device) error {
if err := s.db.Delete(&device).Error; err != nil {
return errors.Wrap(err, "failed to delete device file")
s.Watcher.EmitDelete(device)