示例#1
0
        private static ParameterModel[] CreateParameterModels(CloudStorageAccount account, FunctionInstanceSnapshot snapshot)
        {
            List <ParameterModel> models = new List <ParameterModel>();

            IDictionary <string, FunctionInstanceArgument> parameters    = snapshot.Arguments;
            IDictionary <string, ParameterLog>             parameterLogs = LogAnalysis.GetParameterLogs(account, snapshot);

            foreach (KeyValuePair <string, FunctionInstanceArgument> parameter in parameters)
            {
                string name = parameter.Key;
                FunctionInstanceArgument argument = parameter.Value;
                ParameterLog             log;

                if (parameterLogs != null && parameterLogs.ContainsKey(name))
                {
                    log = parameterLogs[name];
                }
                else
                {
                    log = null;
                }

                LogAnalysis.AddParameterModels(name, argument, log, snapshot, models);
            }

            return(models.ToArray());
        }
示例#2
0
        private static ParameterModel[] CreateParameterModels(CloudStorageAccount account, FunctionInstanceSnapshot snapshot)
        {
            List <ParameterModel> models = new List <ParameterModel>();

            // It's important that we order any virtual parameters (e.g. Singleton parameters) to the end
            // so they don't interfere with actual function parameter ordering
            var parameters = snapshot.Arguments.OrderBy(p => p.Value.IsVirtualParameter);
            IDictionary <string, ParameterLog> parameterLogs = LogAnalysis.GetParameterLogs(account, snapshot);

            foreach (KeyValuePair <string, FunctionInstanceArgument> parameter in parameters)
            {
                string name = parameter.Key;
                FunctionInstanceArgument argument = parameter.Value;
                ParameterLog             log;

                if (parameterLogs != null && parameterLogs.ContainsKey(name))
                {
                    log = parameterLogs[name];
                }
                else
                {
                    log = null;
                }

                LogAnalysis.AddParameterModels(name, argument, log, snapshot, models);
            }

            return(models.ToArray());
        }
        public static void AddParameterModels(string parameterName, FunctionInstanceArgument argument, ParameterLog log,
                                              FunctionInstanceSnapshot snapshot, ICollection <ParamModel> parameterModels)
        {
            ParamModel model = new ParamModel
            {
                Name            = parameterName,
                ArgInvokeString = argument.Value
            };

            if (log != null)
            {
                model.Status = Format(log);
            }

            if (argument.IsBlob)
            {
                model.ExtendedBlobModel = LogAnalysis.CreateExtendedBlobModel(snapshot, argument);
            }

            parameterModels.Add(model);

            // Special-case IBinder, which adds sub-parameters.
            BinderParameterLog binderLog = log as BinderParameterLog;

            if (binderLog != null)
            {
                IEnumerable <BinderParameterLogItem> items = binderLog.Items;

                if (items != null)
                {
                    int count = items.Count();
                    model.Status = String.Format(CultureInfo.CurrentCulture, "Bound {0} object{1}.", count, count != 1 ? "s" : String.Empty);

                    foreach (BinderParameterLogItem item in items)
                    {
                        if (item == null)
                        {
                            continue;
                        }

                        ParameterSnapshot        itemSnapshot = HostIndexer.CreateParameterSnapshot(item.Descriptor);
                        string                   itemName     = parameterName + ": " + itemSnapshot.AttributeText;
                        FunctionInstanceArgument itemArgument =
                            FunctionIndexer.CreateFunctionInstanceArgument(item.Value, item.Descriptor);

                        AddParameterModels(itemName, itemArgument, item.Log, snapshot, parameterModels);
                    }
                }
            }
        }
        public static CloudStorageAccount GetStorageAccount(this FunctionInstanceArgument functionInstanceArgument)
        {
            if (functionInstanceArgument == null)
            {
                throw new ArgumentNullException("functionInstanceArgument");
            }

            string storageAccountName = functionInstanceArgument.AccountName;

            if (storageAccountName != null)
            {
                // Try to find specific connection string
                CloudStorageAccount specificAccount = AccountProvider.GetAccount(storageAccountName);
                if (specificAccount != null)
                {
                    return(specificAccount);
                }
            }

            // If not found, try the dashboard connection string
            CloudStorageAccount storageAccount = AccountProvider.GetAccount(ConnectionStringNames.Dashboard);

            if (AccountProvider.AccountNameMatches(storageAccountName, storageAccount))
            {
                return(storageAccount);
            }

            // If still not found, try the default storage connection string
            storageAccount = AccountProvider.GetAccount(ConnectionStringNames.Storage);
            if (AccountProvider.AccountNameMatches(storageAccountName, storageAccount))
            {
                return(storageAccount);
            }

            // If still not found, try a final search through all known accounts
            // matching on account name
            var accountMap = AccountProvider.GetAccounts();

            foreach (var currAccount in accountMap.Values)
            {
                if (AccountProvider.AccountNameMatches(storageAccountName, currAccount))
                {
                    return(currAccount);
                }
            }

            return(null);
        }
        public static CloudStorageAccount GetStorageAccount(this FunctionInstanceArgument functionInstanceArgument)
        {
            if (functionInstanceArgument == null)
            {
                throw new ArgumentNullException("functionInstanceArgument");
            }

            string storageAccountName = functionInstanceArgument.AccountName;

            if (storageAccountName != null)
            {
                // Try to find specific connection string
                CloudStorageAccount specificAccount = AccountProvider.GetAccount(storageAccountName);

                if (specificAccount != null)
                {
                    return(specificAccount);
                }
            }

            // If not found, try the dashboard connection string
            CloudStorageAccount dashboardAccount = AccountProvider.GetAccount(ConnectionStringNames.Dashboard);

            if (AccountNameMatches(storageAccountName, dashboardAccount))
            {
                return(dashboardAccount);
            }

            // If still not found, try the default storage connection string
            CloudStorageAccount storageAccount = AccountProvider.GetAccount(ConnectionStringNames.Storage);

            if (AccountNameMatches(storageAccountName, storageAccount))
            {
                return(storageAccount);
            }

            return(null);
        }
示例#6
0
        internal static BlobBoundParameterModel CreateExtendedBlobModel(FunctionInstanceSnapshot snapshot, FunctionInstanceArgument argument)
        {
            Debug.Assert(argument != null);

            if (argument.Value == null)
            {
                return(null);
            }

            string[] components = argument.Value.Split(new char[] { '/' });

            if (components.Length != 2)
            {
                return(null);
            }

            var blobParam = new BlobBoundParameterModel();

            blobParam.IsOutput            = argument.IsBlobOutput;
            blobParam.ConnectionStringKey = ConnectionStringProvider.GetPrefixedConnectionStringName(argument.AccountName);

            CloudStorageAccount account = argument.GetStorageAccount();

            if (account == null)
            {
                blobParam.IsConnectionStringMissing = true;
                return(blobParam);
            }

            CloudBlockBlob blob = account
                                  .CreateCloudBlobClient()
                                  .GetContainerReference(components[0])
                                  .GetBlockBlobReference(components[1]);

            Guid?blobWriter = GetBlobWriter(blob);

            if (!blobWriter.HasValue)
            {
                blobParam.IsBlobMissing = true;
            }
            else
            {
                blobParam.OwnerId = blobWriter.Value;
                if (blobWriter.Value == snapshot.Id)
                {
                    blobParam.IsBlobOwnedByCurrentFunctionInstance = true;
                }
            }

            return(blobParam);
        }