예제 #1
0
        public async Task <string> Get([FromQuery] SearchParams searchParams)
        {
            try
            {
                AWSXRayRecorder.Instance.BeginSubsegment("Scanning DynamoDB Table");

                ScanFilter scanFilter = new ScanFilter();

                if (!String.IsNullOrEmpty(searchParams.petcolor))
                {
                    scanFilter.AddCondition("petcolor", ScanOperator.Equal, searchParams.petcolor);
                }
                if (!String.IsNullOrEmpty(searchParams.pettype))
                {
                    scanFilter.AddCondition("pettype", ScanOperator.Equal, searchParams.pettype);
                }
                if (!String.IsNullOrEmpty(searchParams.petid))
                {
                    scanFilter.AddCondition("petid", ScanOperator.Equal, searchParams.petid);
                }

                var scanquery = new ScanRequest
                {
                    TableName  = _configuration["dynamodbtablename"],
                    ScanFilter = scanFilter.ToConditions()
                };

                // This line is intentional. Delays searches
                if (!String.IsNullOrEmpty(searchParams.pettype) && searchParams.pettype == "bunny")
                {
                    Thread.Sleep(3000);
                }


                AWSXRayRecorder.Instance.AddAnnotation("Query", $"petcolor:{searchParams.petcolor}-pettype:{searchParams.pettype}-petid:{searchParams.petid}");
                Console.WriteLine($"[{AWSXRayRecorder.Instance.GetEntity().TraceId}] - {searchParams}");

                var response = await ddbClient.ScanAsync(scanquery);

                AWSXRayRecorder.Instance.EndSubsegment();
                return(BuildPets(response.Items));
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
예제 #2
0
        /// <summary>
        /// Prepares parameters for a scan operation from the list of conditions
        /// </summary>
        internal static ScanFilter GetScanFilterForTable(this TranslationResult translationResult, Table tableDefinition)
        {
            // the last thing to do is to make a full scan
            var scanFilter = new ScanFilter();

            //TODO: check for BETWEEN operator
            foreach (var condition in translationResult.Conditions.Flatten())
            {
                bool conditionForThisFieldExistsAlready = scanFilter.ToConditions().ContainsKey(condition.Item1);
                if (conditionForThisFieldExistsAlready)
                {
                    throw new InvalidOperationException(string.Format("Multiple conditions for the same {0} field are not supported by AWS SDK. As a workaround, please, use a custom FilterExpression.", condition.Item1));
                }

                if
                (
                    (condition.Item2.Values.Length == 1)
                    &&
                    (condition.Item2.Values[0] == null)
                )
                {
                    switch (condition.Item2.Operator)
                    {
                    case ScanOperator.Equal:
                        scanFilter.AddCondition(condition.Item1, ScanOperator.IsNull);
                        break;

                    case ScanOperator.NotEqual:
                        scanFilter.AddCondition(condition.Item1, ScanOperator.IsNotNull);
                        break;

                    default:
                        throw new InvalidOperationException(string.Format("You cannot use {0} operator with null value", condition.Item2.Operator));
                    }
                }
                else
                {
                    scanFilter.AddCondition(condition.Item1, condition.Item2.Operator, condition.Item2.Values);
                }
            }

            return(scanFilter);
        }
예제 #3
0
        public List <PlanItem> GetPlanByAny(Guid?planUId, string name, string uniqueName, string planFile, bool?planFileIsUri, Guid?planContainerUId, string createdBy, DateTime?createdTime, string modifiedBy,
                                            DateTime?modifiedTime)
        {
            List <PlanItem> planList = new List <PlanItem>();

            if (string.IsNullOrWhiteSpace(PlanTable))
            {
                throw new Exception("Plan table name must be specified.");
            }

            try
            {
                Table table = Table.LoadTable(_client, PlanTable);

                ScanFilter scanFilter = new ScanFilter();

                if (planUId != null && planUId != Guid.Empty)
                {
                    scanFilter.AddCondition("UId", ScanOperator.Equal, planUId);
                }
                if (!string.IsNullOrWhiteSpace(name))
                {
                    scanFilter.AddCondition("Name", ScanOperator.Equal, name);
                }
                if (!string.IsNullOrWhiteSpace(uniqueName))
                {
                    scanFilter.AddCondition("UniqueName", ScanOperator.Equal, uniqueName);
                }
                if (!string.IsNullOrWhiteSpace(planFile))
                {
                    scanFilter.AddCondition("PlanFile", ScanOperator.Equal, planFile);
                }
                if (planFileIsUri != null)
                {
                    scanFilter.AddCondition("PlanFileIsUri", ScanOperator.Equal, planFileIsUri);
                }
                if (planContainerUId != null && planContainerUId != Guid.Empty)
                {
                    scanFilter.AddCondition("PlanContainerUId", ScanOperator.Equal, planContainerUId);
                }
                if (!string.IsNullOrWhiteSpace(createdBy))
                {
                    scanFilter.AddCondition("AuditCreatedBy", ScanOperator.Equal, createdBy);
                }
                if (createdTime != null)
                {
                    scanFilter.AddCondition("AuditCreatedTime", ScanOperator.Equal, createdTime);
                }
                if (!string.IsNullOrWhiteSpace(modifiedBy))
                {
                    scanFilter.AddCondition("AuditModifiedBy", ScanOperator.Equal, modifiedBy);
                }
                if (modifiedTime != null)
                {
                    scanFilter.AddCondition("AuditModifiedTime", ScanOperator.Equal, modifiedTime);
                }

                if (scanFilter.ToConditions().Count == 0)
                {
                    throw new Exception("At least one filter condition must be specified.");
                }

                Search search = table.Scan(scanFilter);

                do
                {
                    List <Document> documentList = search.GetNextSet();
                    if (documentList.Count == 0)
                    {
                        throw new Exception("Plan cannot be found.");
                    }

                    foreach (Document document in documentList)
                    {
                        string   json = document.ToJsonPretty();
                        PlanItem plan = JsonConvert.DeserializeObject <PlanItem>(json, _settings);
                        planList.Add(plan);
                    }
                } while (!search.IsDone);
            }
            catch (Exception ex)
            {
                Debug.Write(ex.Message);
                throw;
            }

            return(planList);
        }