private static Client GetClient(IConfigurationRoot config, AnalysisMessage message) { var accounts = new AccountManager(config); var password = accounts.GetPassword(message.Account); return(new Client(config.GetValue <string>("MythX:BaseUrl"), message.Account, password)); }
public static async Task Run( [QueueTrigger("%Storage:AnalysisQueue%", Connection = "Storage:Connection")] AnalysisMessage message, [Queue("%Storage:AnalysisQueue%", Connection = "Storage:Connection")] CloudQueue analysisQueue, [Table("%Storage:ContractTable%", Connection = "Storage:Connection")] CloudTable contractTable, [Table("%Storage:AnalysisTable%", Connection = "Storage:Connection")] CloudTable analysisTable, ILogger log, ExecutionContext context) { IConfigurationRoot config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); var client = GetClient(config, message); var response = await client.GetAnalysisAsync(message.AnalysisId); var analysis = JsonConvert.DeserializeObject <Models.Analysis>(response); if (analysis.Status != "Error" && analysis.Status != "Finished") { string msg = JsonConvert.SerializeObject(message); var visibilityDelay = TimeSpan.FromMinutes(4); await analysisQueue.AddMessageAsync(new CloudQueueMessage(msg), null, visibilityDelay, null, null); return; } string issues = null; string severity = null; if (analysis.Status == "Finished") { issues = await client.GetIssuesAsync(analysis.UUID); var list = JsonConvert.DeserializeObject <List <AnalysisResult> >(issues); if (list.Count > 0 && list[0] != null && list[0].Issues != null && list[0].Issues.Count > 0) { severity = list[0].Issues[0].Severity; } await Blob.WriteAsync( config.GetValue <string>("Storage:Connection"), config.GetValue <string>("Storage:AnalysisIssuesContainer"), analysis.UUID, issues); } await Blob.WriteAsync( config.GetValue <string>("Storage:Connection"), config.GetValue <string>("Storage:AnalysisContainer"), message.Address, response); await InsertAnalysis(analysisTable, message.Address, analysis); await InsertContract(contractTable, message, analysis, severity); }
public static async Task Run( [QueueTrigger("%Storage:AnalysisPoisonQueue%", Connection = "Storage:Connection")] AnalysisMessage message, [Queue("%Storage:AnalysisQueue%", Connection = "Storage:Connection")] CloudQueue contractQueue, ILogger log) { string msg = JsonConvert.SerializeObject(message); var visibilityDelay = TimeSpan.FromHours(1); await contractQueue.AddMessageAsync(new CloudQueueMessage(msg), null, visibilityDelay, null, null); }
public static void getUnfinishedRequirements(AnalysisContext analysisContext) { //Get the rule settings RuleConfiguration ruleConfiguration = analysisContext.GetRuleConfiguration(cRuleId_getUnfinishedRequirements); //Only run if the rule is enabled if (ruleConfiguration.Enabled) { //Get the configuration data for this rule PropertyObject ruleData = analysisContext.GetRuleAnalysisData(cRuleId_getUnfinishedRequirements, RuleAnalysisDataScope.RuleAnalysisDataScope_File, GetRuleAnalysisDataOptions.GetRuleAnalysisDataOption_NoOptions); //Only run the analysis if the object we are analyzing contains a Requirements field PropertyObject requirements = getRequirementsObject(analysisContext); if (requirements != null) { if (requirements.GetNumElements() > 0) //Only do something if the object has requirements entered { int numberofRequirements = requirements.GetNumElements(); string currentRequirement; for (int idx = 0; idx < numberofRequirements; idx++) { currentRequirement = requirements.GetValStringByOffset(idx, 0); string[] requirementparts = currentRequirement.Split(','); if (requirementparts.Length != 3) { //Malformed Requirement Do nothing this should be handled as an error in the getMalformedRequirement Rule } else { if (requirementparts[2].Trim(' ') == "Done") { //Do nothing we only want the outstanding requirements } else { AnalysisMessage message = analysisContext.NewMessage(cRuleId_getUnfinishedRequirements, "Unfinished Requirement " + currentRequirement, analysisContext.Object); analysisContext.ReportMessage(message); } } } } } } }
private static async Task InsertContract(CloudTable table, AnalysisMessage message, Models.Analysis analysis, string severity) { var entry = new ContractEntity() { PartitionKey = message.Address, RowKey = "", TxHash = message.TxHash, AnalysisId = analysis.UUID, AnalysisStatus = analysis.Status, Severity = severity, Version = 1 }; TableOperation insertOperation = TableOperation.InsertOrReplace(entry); await table.ExecuteAsync(insertOperation); }
public static void getMalformedRequirements(AnalysisContext analysisContext) { //Get the rule settings RuleConfiguration ruleConfiguration = analysisContext.GetRuleConfiguration(cRuleId_getMalformedRequirements); //Only run if the rule is enabled if (ruleConfiguration.Enabled) { //Get the configuration data for this rule PropertyObject ruleData = analysisContext.GetRuleAnalysisData(cRuleId_getMalformedRequirements, RuleAnalysisDataScope.RuleAnalysisDataScope_File, GetRuleAnalysisDataOptions.GetRuleAnalysisDataOption_NoOptions); //Only run the analysis if the object we are analyzing contains a Requirements field PropertyObject requirements = getRequirementsObject(analysisContext); if (requirements != null) { if (requirements.GetNumElements() > 0) //Only do something if the object has requirements entered { int numberofRequirements = requirements.GetNumElements(); string currentRequirement; for (int idx = 0; idx < numberofRequirements; idx++) { currentRequirement = requirements.GetValStringByOffset(idx, 0); string[] requirementparts = currentRequirement.Split(','); if (requirementparts.Length != 3) { AnalysisMessage message = analysisContext.NewMessage(cRuleId_getMalformedRequirements, "Requirement [" + currentRequirement + "] is not formated in Rule,Summary,Status format", analysisContext.Object); analysisContext.ReportMessage(message); } } } } } }