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()); }
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); }
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); }