private async Task CheckTagChangeAsync( Subscription subscription, IDockerRegistryClient registryClient, CloudTable digestsTable) { log.LogInformation($"Checking tag change for '{subscription.Repo}:{subscription.Tag}'"); string digest = await registryClient.GetDigestAsync(subscription); log.LogInformation($"Querying stored digest for '{subscription.Repo}:{subscription.Tag}'"); var keys = DigestEntry.GetKeys(subscription.Registry, subscription.Repo, subscription.Tag); var retrieveOperation = TableOperation.Retrieve <DigestEntry>(keys.PartitionKey, keys.RowKey); var result = (DigestEntry)(await digestsTable.ExecuteAsync(retrieveOperation)).Result; TagChangedData tagChangedData = null; if (result is null) { log.LogInformation($"Tag '{subscription.Repo}:{subscription.Tag}' is not stored yet. Inserting into table."); var insertOperation = TableOperation.Insert(new DigestEntry(subscription.Registry, subscription.Repo, subscription.Tag) { Digest = digest }); await digestsTable.ExecuteAsync(insertOperation); tagChangedData = CreateTagChangedData(subscription, digest, TagChangeType.New); } else if (result.Digest != digest) { log.LogInformation($"Tag '{subscription.Repo}:{subscription.Tag}' has digest diff. Updating table with new value.{Environment.NewLine}Stored: {result.Digest}{Environment.NewLine}Latest: {digest}"); result.Digest = digest; var insertOperation = TableOperation.Merge(result); await digestsTable.ExecuteAsync(insertOperation); tagChangedData = CreateTagChangedData(subscription, digest, TagChangeType.Updated); } else { log.LogInformation($"No change to digest for '{subscription.Repo}:{subscription.Tag}'."); } if (tagChangedData != null) { EventGridEvent eventGridEvent = new EventGridEvent { Data = tagChangedData, Subject = $"{tagChangedData.Repo}:{tagChangedData.Tag}", Id = Guid.NewGuid().ToString(), EventTime = DateTime.UtcNow, EventType = tagChangedData.ChangeType.ToString(), DataVersion = "1.0", }; await SendEventNotificationAsync(log, config["TagChangedEndpoint"], config["TagChangedAccessKey"], eventGridEvent); } }
public void AddEntryToList(DigestEntry entry) { if (entry.typeOfDigestEntry == DigestEntryType.Person && !peopleList.Contains(entry)) { peopleList.Add(entry); AlphabetizeAListByName(peopleList); } if (entry.typeOfDigestEntry == DigestEntryType.Place && !placesList.Contains(entry)) { placesList.Add(entry); AlphabetizeAListByName(placesList); } if (entry.typeOfDigestEntry == DigestEntryType.Thing && !thingsList.Contains(entry)) { thingsList.Add(entry); AlphabetizeAListByName(thingsList); } }
public void DoWork(IRequest request) { // ReturnSample(request); //return; // DECLARATIONS string resourceKindName; string EndPoint; SdataContext sdataContext; ISyncSyncDigestInfoStore syncDigestStore; SyncDigestInfo syncDigestInfo; // INITIALIZATIONS sdataContext = _requestContext.SdataContext; resourceKindName = _requestContext.ResourceKind.ToString(); EndPoint = _requestContext.DatasetLink + resourceKindName; syncDigestStore = NorthwindAdapter.StoreLocator.GetSyncDigestStore(sdataContext); // Get the digest info from store syncDigestInfo = syncDigestStore.Get(resourceKindName); /* Create a digest payload and fill it with values retrived from digest store */ //DigestPayload digestPayload = new DigestPayload(); Digest digest = new Digest(); digest.Origin = EndPoint; // set digest entries if ((null == syncDigestInfo) || (syncDigestInfo.Count == 0)) { DigestEntry entry = new DigestEntry(); entry.ConflictPriority = 1; entry.EndPoint = EndPoint; entry.Stamp = DateTime.Now; entry.Tick = 1; digest.Entries = new DigestEntry[] { entry }; } else { digest.Entries = new DigestEntry[syncDigestInfo.Count]; for (int i = 0; i < syncDigestInfo.Count; i++) { DigestEntry entry = new DigestEntry(); entry.ConflictPriority = syncDigestInfo[i].ConflictPriority; entry.EndPoint = syncDigestInfo[i].EndPoint; entry.Stamp = syncDigestInfo[i].Stamp; entry.Tick = (int)syncDigestInfo[i].Tick; digest.Entries[i] = entry; } } // The url to this request string url = EndPoint + "/$syncDigest"; // Create self link FeedLink link = new FeedLink(url, LinkType.Self, MediaType.AtomEntry); // Create FeedEntry // Set Response DigestFeedEntry digestFeedEntry = new DigestFeedEntry(); digestFeedEntry.Digest = digest; digestFeedEntry.Title = "Synchronization digest"; //digestFeedEntry.Id = url; digestFeedEntry.Links.Add(link); request.Response.FeedEntry = digestFeedEntry; request.Response.ContentType = MediaType.AtomEntry; }