public async Task <IList <SiteInformation> > GetSitesInformation([OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            var resourceGroup = context.GetInput <string>();

            var activity = context.CreateActivityProxy <ISharedFunctions>();

            var result = new List <SiteInformation>();

            var certificates = await activity.GetAllCertificates();

            // App Service を取得
            var sites = await activity.GetSites((resourceGroup, true));

            foreach (var site in sites.ToLookup(x => x.SplitName().appName))
            {
                var siteInformation = new SiteInformation {
                    Name = site.Key, Slots = new List <SlotInformation>()
                };

                foreach (var slot in site)
                {
                    var(_, slotName) = slot.SplitName();

                    var hostNameSslStates = slot.HostNameSslStates
                                            .Where(x => !x.Name.EndsWith(_environment.AppService) && !x.Name.EndsWith(_environment.TrafficManager));

                    var slotInformation = new SlotInformation
                    {
                        Name     = slotName ?? "production",
                        DnsNames = hostNameSslStates.Select(x => new DnsNameInformation
                        {
                            Name   = x.Name,
                            Issuer = certificates.FirstOrDefault(xs => xs.Thumbprint == x.Thumbprint)?.Issuer ?? "None"
                        }).ToArray()
                    };

                    if (slotInformation.DnsNames.Count != 0)
                    {
                        siteInformation.Slots.Add(slotInformation);
                    }
                }

                if (siteInformation.Slots.Count != 0)
                {
                    result.Add(siteInformation);
                }
            }

            return(result);
        }
        public async Task <IList <ResourceGroupInformation> > GetSitesInformation([OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            var activity = context.CreateActivityProxy <ISharedFunctions>();

            // App Service を取得
            var sites = await activity.GetSites();

            var certificates = await activity.GetAllCertificates();

            var result = new List <ResourceGroupInformation>();

            foreach (var item in sites.ToLookup(x => x.ResourceGroup))
            {
                var resourceGroup = new ResourceGroupInformation
                {
                    Name  = item.Key,
                    Sites = new List <SiteInformation>()
                };

                foreach (var site in item.ToLookup(x => x.SplitName().siteName))
                {
                    var siteInformation = new SiteInformation
                    {
                        Name  = site.Key,
                        Slots = new List <SlotInformation>()
                    };

                    foreach (var slot in site)
                    {
                        var(_, slotName) = slot.SplitName();

                        var hostNameSslStates = slot.HostNameSslStates
                                                .Where(x => !x.Name.EndsWith(".azurewebsites.net"));

                        var slotInformation = new SlotInformation
                        {
                            Name    = slotName ?? "production",
                            Domains = hostNameSslStates.Select(x => new DomainInformation
                            {
                                Name   = x.Name,
                                Issuer = certificates.FirstOrDefault(xs => xs.Thumbprint == x.Thumbprint)?.Issuer ?? "None"
                            }).ToArray()
                        };

                        if (slotInformation.Domains.Count != 0)
                        {
                            siteInformation.Slots.Add(slotInformation);
                        }
                    }

                    if (siteInformation.Slots.Count != 0)
                    {
                        resourceGroup.Sites.Add(siteInformation);
                    }
                }

                if (resourceGroup.Sites.Count != 0)
                {
                    result.Add(resourceGroup);
                }
            }

            return(result);
        }