Example #1
0
        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;
        }
Example #4
0
        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;
        }