custom/Models/PSApplicationInsightsComponent.cs

// ----------------------------------------------------------------------------------
//
// Copyright Microsoft Corporation
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------------------------------------------------------------
 
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Azure.PowerShell.Cmdlets.ApplicationInsights.Models.Api202002;
using Microsoft.Azure.PowerShell.Cmdlets.ApplicationInsights.Models.Api20150501;
 
namespace Microsoft.Azure.PowerShell.Cmdlets.ApplicationInsights.Models
{
    public class PSApplicationInsightsComponent
    {
        public PSApplicationInsightsComponent(ApplicationInsightsComponent component)
        {
            this.ResourceGroupName = ParseResourceGroupFromId(component.Id);
            this.Name = component.Name;
            this.Id = component.Id;
            this.Location = component.Location;
            this.Tags = component.Tag.Keys.ToDictionary(x => x, x => component.Tag[x]);
            this.Kind = component.Kind;
            this.Type = component.Type;
            this.AppId = component.AppId;
            this.ApplicationId = component.ApplicationId;
            this.ApplicationType = component.ApplicationType;
            this.CreationDate = component.CreationDate;
            this.FlowType = component.FlowType;
            this.HockeyAppId = component.HockeyAppId;
            this.HockeyAppToken = component.HockeyAppToken;
            this.InstrumentationKey = component.InstrumentationKey;
            this.ProvisioningState = component.ProvisioningState;
            this.RequestSource = component.RequestSource;
            this.SamplingPercentage = component.SamplingPercentage;
            this.TenantId = component.TenantId;
            this.PublicNetworkAccessForIngestion = component.PublicNetworkAccessForIngestion;
            this.PublicNetworkAccessForQuery = component.PublicNetworkAccessForQuery;
            this.PrivateLinkScopedResources = component.PrivateLinkScopedResource.ToList();
            this.RetentionInDays = component.RetentionInDay;
            this.ConnectionString = component.ConnectionString;
        }
 
        public string Id { get; set; }
 
        public string ResourceGroupName { get; set; }
 
        public string Name { get; set; }
 
        public string Kind { get; set; }
 
        public string Location { get; set; }
 
        public string Type { get; set; }
 
        public string AppId { get; set; }
 
        public string ApplicationId { get; private set; }
 
        public string ApplicationType { get; set; }
 
        public IDictionary<string, string> Tags { get; set; }
 
        public DateTime? CreationDate { get; set; }
 
        public string FlowType { get; set; }
 
        public string HockeyAppId { get; set; }
 
        public string HockeyAppToken { get; set; }
 
        public string InstrumentationKey { get; set; }
 
        public string ProvisioningState { get; set; }
 
        public string RequestSource { get; set; }
 
        public double? SamplingPercentage { get; set; }
 
        public string TenantId { get; set; }
 
        public string PublicNetworkAccessForIngestion { get; set; }
 
        public string PublicNetworkAccessForQuery { get; set; }
 
        public IList<IPrivateLinkScopedResource> PrivateLinkScopedResources { get; private set; }
 
        public string ConnectionString { get; private set; }
 
        public int? RetentionInDays { get; set; }
 
        public static PSApplicationInsightsComponent Create(ApplicationInsightsComponent component)
        {
            var result = new PSApplicationInsightsComponent(component);
 
            return result;
        }
 
        private static string ParseResourceGroupFromId(string idFromServer)
        {
            if (!string.IsNullOrEmpty(idFromServer))
            {
                string[] tokens = idFromServer.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
 
                return tokens[3];
            }
 
            return null;
        }
    }
 
    public class PSApplicationInsightsComponentTableView : PSApplicationInsightsComponent
    {
        public PSApplicationInsightsComponentTableView(ApplicationInsightsComponent component)
            : base(component)
        {
        }
    }
 
    public class PSApplicationInsightsComponentWithPricingPlan : PSApplicationInsightsComponent
    {
        public string PricingPlan;
 
        public double? Cap { get; set; }
 
        public int? ResetTime { get; set; }
 
        public bool StopSendNotificationWhenHitCap { get; set; }
 
        public string CapExpirationTime { get; }
 
        public bool IsCapped { get; }
 
        public PSApplicationInsightsComponentWithPricingPlan(ApplicationInsightsComponent component,
                                                             ApplicationInsightsComponentBillingFeatures billing,
                                                             ApplicationInsightsComponentQuotaStatus status)
            : base(component)
        {
            if (billing.CurrentBillingFeature.Any(f => f.Contains("Enterprise")))
            {
                this.PricingPlan = "Application Insights Enterprise";
            }
            else
            {
                this.PricingPlan = billing.CurrentBillingFeature.FirstOrDefault();
            }
 
            this.Cap = billing.DataVolumeCap.Cap;
            this.ResetTime = billing.DataVolumeCap.ResetTime;
            this.StopSendNotificationWhenHitCap = billing.DataVolumeCap.StopSendNotificationWhenHitCap.Value;
            this.CapExpirationTime = status.ExpirationTime;
            this.IsCapped = status.ShouldBeThrottled != null ? status.ShouldBeThrottled.Value : false;
        }
    }
}