Esempio n. 1
0
        public void RegisterPlugins(CSharpConverter converter)
        {
            if (converter == null)
            {
                throw new ArgumentNullException(nameof(converter));
            }
            ConvertBegin.Clear();
            AfterPreprocessing.Clear();
            GetCSharpNameResolvers.Clear();
            GetCSharpTypeResolvers.Clear();
            GetCSharpContainerResolvers.Clear();
            CompilationConverters.Clear();
            CommentConverters.Clear();
            EnumConverters.Clear();
            EnumItemConverters.Clear();
            ClassConverters.Clear();
            FieldConverters.Clear();
            FunctionConverters.Clear();
            FunctionTypeConverters.Clear();
            ParameterConverters.Clear();
            TypedefConverters.Clear();
            Converting.Clear();
            Converted.Clear();
            ConvertEnd.Clear();
            RegisteredPlugins.Clear();

            for (var index = Options.Plugins.Count - 1; index >= 0; index--)
            {
                var plugin = Options.Plugins[index];
                if (RegisteredPlugins.Contains(plugin))
                {
                    continue;
                }

                RegisteredPlugins.Add(plugin);
                plugin.Register(converter, this);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Builds a row item from the current line of the csv reader, this method
        /// does not change the position of the csv reader. If the row item
        /// does not describe a "reservable" charge, then null is returned
        /// </summary>
        /// <param name="reader">The csv reader to read from</param>
        /// <returns></returns>
        public static CsvRowItem Build(CsvReader reader)
        {
            string instanceType = String.Empty;

            // The field names are case sensitive
            if (reader.TryGetField <string>("operation", out string operation) &&
                !String.IsNullOrEmpty(operation) &&
                reader.TryGetField <string>("usagetype", out string usageType) &&
                allUsageTypes.IsMatch(usageType) &&
                reader.TryGetField <string>("servicecode", out string serviceCode) &&
                !String.IsNullOrEmpty(serviceCode) &&
                (Constants.InstanceBasedReservableServices.Contains(serviceCode) ? reader.TryGetField("instance type", out instanceType) : true)
                )
            {
                reader.TryGetField <string>("sku", out string sku);
                reader.TryGetField <double>("priceperunit", out double pricePerUnit);
                reader.TryGetField <string>("leasecontractlength", out string leaseContractLength);
                reader.TryGetField <string>("pricedescription", out string priceDescription);
                reader.TryGetField <string>("offertermcode", out string offerTermCode);
                reader.TryGetField <int>("vcpu", out int vCPU);
                reader.TryGetField <string>("memory", out string memoryString);

                double memory = 0;

                if (!String.IsNullOrEmpty(memoryString))
                {
                    memoryString = memoryString.Replace(",", "");

                    Match memoryMatch = memoryRegex.Match(memoryString);

                    if (memoryMatch.Success)
                    {
                        Double.TryParse(memoryMatch.Groups[1].Value, out memory);
                    }
                }

                Term termType = Term.ON_DEMAND;

                if (reader.TryGetField <string>("termtype", out string termString))
                {
                    termType = EnumConverters.ConvertToTerm(termString);
                }

                if (String.IsNullOrEmpty(instanceType))
                {
                    // This will probably only happen for DynamoDB
                    instanceType = usageType;
                }

                PurchaseOption purchaseOption = PurchaseOption.ON_DEMAND;

                if (reader.TryGetField <string>("purchaseoption", out string PurchaseOptionString))
                {
                    purchaseOption = EnumConverters.ConvertToPurchaseOption(PurchaseOptionString);
                }

                OfferingClass offeringClass = OfferingClass.STANDARD;

                if (reader.TryGetField <string>("offeringclass", out string offeringClassString))
                {
                    offeringClass = EnumConverters.ConvertToOfferingClass(offeringClassString);
                }

                // Only EC2 has tenancy
                if (!reader.TryGetField <string>("tenancy", out string tenancy))
                {
                    tenancy = "Shared";
                }

                int lease = String.IsNullOrEmpty(leaseContractLength) ? 0 : Int32.Parse(Regex.Match(leaseContractLength, "^([0-9]+)").Groups[1].Value);

                string platform = GetPlatform(reader);

                if (!reader.TryGetField <string>("operating system", out string operatingSystem))
                {
                    if (!String.IsNullOrEmpty(platform))
                    {
                        operatingSystem = platform;
                    }
                    else
                    {
                        operatingSystem = serviceCode;
                    }
                }

                return(new CsvRowItem(
                           sku,
                           offerTermCode,
                           termType,
                           lease,
                           pricePerUnit,
                           vCPU,
                           memory,
                           purchaseOption,
                           offeringClass,
                           tenancy,
                           instanceType,
                           platform,
                           operatingSystem,
                           operation,
                           usageType,
                           serviceCode,
                           RegionMapper.GetRegionFromUsageType(usageType),
                           priceDescription
                           ));
            }
            else
            {
                return(null);
            }
        }