public static void AddAlert(this DocumentDatabase self, Alert alert) { while (true) { using (self.TransactionalStorage.DisableBatchNesting()) using (var putSerialLock = self.DocumentLock.TryLock(25)) { if (putSerialLock == null) continue; AlertsDocument alertsDocument; var alertsDoc = self.Documents.Get(Constants.RavenAlerts, null); RavenJObject metadata; Etag etag; if (alertsDoc == null) { etag = Etag.Empty; alertsDocument = new AlertsDocument(); metadata = new RavenJObject(); } else { etag = alertsDoc.Etag; alertsDocument = alertsDoc.DataAsJson.JsonDeserialization<AlertsDocument>() ?? new AlertsDocument(); metadata = alertsDoc.Metadata; } var withSameUniqe = alertsDocument.Alerts.FirstOrDefault(alert1 => alert1.UniqueKey == alert.UniqueKey); if (withSameUniqe != null) { // copy information about observed alert.LastDismissedAt = withSameUniqe.LastDismissedAt; alertsDocument.Alerts.Remove(withSameUniqe); } alertsDocument.Alerts.Add(alert); var document = RavenJObject.FromObject(alertsDocument); document.Remove("Id"); try { self.Documents.Put(Constants.RavenAlerts, etag, document, metadata, null); return; } catch (ConcurrencyException) { //try again... } } } }
public override void Execute(object parameter) { var alertsDocument = new AlertsDocument { Alerts = new List<Alert>(alertsModel.ServerAlerts) }; ApplicationModel.DatabaseCommands .PutAsync(Constants.RavenAlerts, null,RavenJObject.FromObject(alertsDocument),new RavenJObject()) .ContinueOnSuccessInTheUIThread(() => ApplicationModel.Current.Notifications.Add(new Notification("Alerts Saved"))); }
public void AddAlert(Alert alert) { lock (putSerialLock) { AlertsDocument alertsDocument; var alertsDoc = Get(Constants.RavenAlerts, null); RavenJObject metadata; if (alertsDoc == null) { alertsDocument = new AlertsDocument(); metadata = new RavenJObject(); } else { alertsDocument = alertsDoc.DataAsJson.JsonDeserialization<AlertsDocument>() ?? new AlertsDocument(); metadata = alertsDoc.Metadata; } var withSameUniqe = alertsDocument.Alerts.FirstOrDefault(alert1 => alert1.UniqueKey == alert.UniqueKey); if (withSameUniqe != null) alertsDocument.Alerts.Remove(withSameUniqe); alertsDocument.Alerts.Add(alert); var document = RavenJObject.FromObject(alertsDocument); document.Remove("Id"); Put(Constants.RavenAlerts, null, document, metadata, null); } }
public void AddAlert(Alert alert) { AlertsDocument alertsDocument; var alertsDoc = Get(Constants.RavenAlerts, null); if (alertsDoc == null) alertsDocument = new AlertsDocument(); else alertsDocument = alertsDoc.DataAsJson.JsonDeserialization<AlertsDocument>() ?? new AlertsDocument(); alertsDocument.Alerts.Add(alert); }