VOL-4465 raise ONU/OLT deleted events

Change-Id: I8f8aea3dcf97996816f8a856b05e751f7c391ee4
diff --git a/rw_core/core/device/agent.go b/rw_core/core/device/agent.go
index d819fae..1adf88c 100755
--- a/rw_core/core/device/agent.go
+++ b/rw_core/core/device/agent.go
@@ -209,6 +209,8 @@
 	if err := agent.dbProxy.Remove(ctx, agent.deviceID); err != nil {
 		return err
 	}
+	//send the device event to the message bus
+	_ = agent.deviceMgr.Agent.SendDeviceDeletedEvent(ctx, agent.device, time.Now().Unix())
 
 	close(agent.exitChannel)
 
diff --git a/rw_core/core/device/event/event.go b/rw_core/core/device/event/event.go
index ab80736..5d8ccda 100644
--- a/rw_core/core/device/event/event.go
+++ b/rw_core/core/device/event/event.go
@@ -321,3 +321,27 @@
 	logger.Debugw(ctx, "device-state-change-sent", log.Fields{"event": *de})
 	return nil
 }
+
+// SendDeviceDeletedEvent sends Device deleted Event to message bus
+func (q *Agent) SendDeviceDeletedEvent(ctx context.Context, device *voltha.Device, raisedTs int64) error {
+
+	var onuId uint32
+	var ponId uint32
+
+	subCategory := voltha.EventSubCategory_OLT
+	if !device.Root {
+		onuId = device.ProxyAddress.OnuId
+		ponId = device.ProxyAddress.ChannelId
+		subCategory = voltha.EventSubCategory_ONU
+	}
+	de := ev.CreateDeviceDeletedEvent(device.SerialNumber, device.Id, device.ParentId,
+		onuId, ponId, device.Root)
+
+	if err := q.eventProxy.SendDeviceEvent(ctx, de, voltha.EventCategory_EQUIPMENT,
+		subCategory, raisedTs); err != nil {
+		logger.Errorw(ctx, "error-sending-device-deleted-event", log.Fields{"id": device.Id, "err": err})
+		return err
+	}
+	logger.Debugw(ctx, "device-deleted-event-sent", log.Fields{"event": *de})
+	return nil
+}