Skip to content

Commit

Permalink
Merge pull request #152 from MvRoo/michael
Browse files Browse the repository at this point in the history
Added ability to change http timeout via command line for cost retrieval
  • Loading branch information
mivano committed Jun 15, 2024
2 parents 37b875f + 64d116b commit ddd3ba0
Show file tree
Hide file tree
Showing 10 changed files with 96 additions and 79 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.sh text eol=lf
31 changes: 16 additions & 15 deletions src/Commands/AccumulatedCost/AccumulatedCostCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ namespace AzureCostCli.Commands.AccumulatedCost;
public class AccumulatedCostCommand : AsyncCommand<AccumulatedCostSettings>
{
private readonly ICostRetriever _costRetriever;

private readonly Dictionary<OutputFormat, BaseOutputFormatter> _outputFormatters = new();

public AccumulatedCostCommand(ICostRetriever costRetriever)
{
_costRetriever = costRetriever;

// Add the output formatters
_outputFormatters.Add(OutputFormat.Console, new ConsoleOutputFormatter());
_outputFormatters.Add(OutputFormat.Json, new JsonOutputFormatter());
Expand Down Expand Up @@ -56,7 +56,8 @@ public override async Task<int> ExecuteAsync(CommandContext context, Accumulated
AnsiConsole.WriteLine($"Version: {typeof(AccumulatedCostCommand).Assembly.GetName().Version}");

_costRetriever.CostApiAddress = settings.CostApiAddress;

_costRetriever.HttpTimeout = TimeSpan.FromSeconds(settings.HttpTimeout);

// Get the subscription ID from the settings
var subscriptionId = settings.Subscription;

Expand All @@ -67,12 +68,12 @@ public override async Task<int> ExecuteAsync(CommandContext context, Accumulated
{
if (settings.Debug)
AnsiConsole.WriteLine("No subscription ID specified. Trying to retrieve the default subscription ID from Azure CLI.");

subscriptionId = Guid.Parse(AzCommand.GetDefaultAzureSubscriptionId());

if (settings.Debug)
AnsiConsole.WriteLine($"Default subscription ID retrieved from az cli: {subscriptionId}");

settings.Subscription = subscriptionId;
}
catch (Exception e)
Expand All @@ -86,18 +87,18 @@ public override async Task<int> ExecuteAsync(CommandContext context, Accumulated
AccumulatedCostDetails accumulatedCost = null;

Subscription subscription = null;

await AnsiConsoleExt.Status()
.StartAsync("Fetching cost data...", async ctx =>
{
if (settings.GetScope.IsSubscriptionBased)
{
ctx.Status = "Fetching subscription details...";
// Fetch the subscription details
subscription = await _costRetriever.RetrieveSubscription(settings.Debug, subscriptionId.Value);
}
else
else
{
ctx.Status = "Fetching Enrollment details...";
// Fetch the enrollment details //TODO
Expand Down Expand Up @@ -156,7 +157,7 @@ await AnsiConsoleExt.Status()
}
IEnumerable<CostNamedItem> bySubscriptionCosts = null;
if (settings.GetScope.IsSubscriptionBased==false)
if (settings.GetScope.IsSubscriptionBased == false)
{
ctx.Status = "Fetching cost data by subscription...";
bySubscriptionCosts = await _costRetriever.RetrieveCostBySubscription(settings.Debug,
Expand All @@ -166,14 +167,14 @@ await AnsiConsoleExt.Status()
ctx.Status = "Fetching cost data by service name...";
var byServiceNameCosts = await _costRetriever.RetrieveCostByServiceName(settings.Debug,
settings.GetScope, settings.Filter, settings.Metric, settings.Timeframe, settings.From, settings.To);
ctx.Status = "Fetching cost data by location...";
var byLocationCosts = await _costRetriever.RetrieveCostByLocation(settings.Debug, settings.GetScope,
settings.Filter,
settings.Metric,
settings.Timeframe, settings.From, settings.To);
ctx.Status= "Fetching cost data by resource group...";
ctx.Status = "Fetching cost data by resource group...";
var byResourceGroupCosts = await _costRetriever.RetrieveCostByResourceGroup(settings.Debug,
settings.GetScope,
settings.Filter,
Expand All @@ -184,10 +185,10 @@ await AnsiConsoleExt.Status()
byLocationCosts, byResourceGroupCosts, bySubscriptionCosts);
});

// Write the output
await _outputFormatters[settings.Output]
.WriteAccumulatedCost(settings,accumulatedCost);
.WriteAccumulatedCost(settings, accumulatedCost);

return 0;
}
Expand Down
19 changes: 10 additions & 9 deletions src/Commands/Budgets/BudgetsCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace AzureCostCli.Commands.Budgets;

public class BudgetsCommand: AsyncCommand<BudgetsSettings>
public class BudgetsCommand : AsyncCommand<BudgetsSettings>
{
private readonly ICostRetriever _costRetriever;

Expand All @@ -16,7 +16,7 @@ public class BudgetsCommand: AsyncCommand<BudgetsSettings>
public BudgetsCommand(ICostRetriever costRetriever)
{
_costRetriever = costRetriever;

// Add the output formatters
_outputFormatters.Add(OutputFormat.Console, new ConsoleOutputFormatter());
_outputFormatters.Add(OutputFormat.Json, new JsonOutputFormatter());
Expand All @@ -31,9 +31,10 @@ public override async Task<int> ExecuteAsync(CommandContext context, BudgetsSett
// Show version
if (settings.Debug)
AnsiConsole.WriteLine($"Version: {typeof(CostByResourceCommand).Assembly.GetName().Version}");

_costRetriever.CostApiAddress = settings.CostApiAddress;

_costRetriever.HttpTimeout = TimeSpan.FromSeconds(settings.HttpTimeout);

// Get the subscription ID from the settings
var subscriptionId = settings.Subscription;

Expand All @@ -44,12 +45,12 @@ public override async Task<int> ExecuteAsync(CommandContext context, BudgetsSett
{
if (settings.Debug)
AnsiConsole.WriteLine("No subscription ID specified. Trying to retrieve the default subscription ID from Azure CLI.");

subscriptionId = Guid.Parse(AzCommand.GetDefaultAzureSubscriptionId());

if (settings.Debug)
AnsiConsole.WriteLine($"Default subscription ID retrieved from az cli: {subscriptionId}");

settings.Subscription = subscriptionId;
}
catch (Exception e)
Expand All @@ -69,6 +70,6 @@ await _outputFormatters[settings.Output]

return 0;
}


}
3 changes: 2 additions & 1 deletion src/Commands/CostByResource/CostByResourceCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ public override async Task<int> ExecuteAsync(CommandContext context, CostByResou
AnsiConsole.WriteLine($"Version: {typeof(CostByResourceCommand).Assembly.GetName().Version}");

_costRetriever.CostApiAddress = settings.CostApiAddress;

_costRetriever.HttpTimeout = TimeSpan.FromSeconds(settings.HttpTimeout);

// Get the subscription ID from the settings
var subscriptionId = settings.Subscription;

Expand Down
3 changes: 2 additions & 1 deletion src/Commands/CostByTag/CostByTagCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ public override async Task<int> ExecuteAsync(CommandContext context, CostByTagSe
AnsiConsole.WriteLine($"Version: {typeof(CostByResourceCommand).Assembly.GetName().Version}");

_costRetriever.CostApiAddress = settings.CostApiAddress;

_costRetriever.HttpTimeout = TimeSpan.FromSeconds(settings.HttpTimeout);

// Get the subscription ID from the settings
var subscriptionId = settings.Subscription;

Expand Down
5 changes: 4 additions & 1 deletion src/Commands/CostSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,10 @@ public class CostSettings : LogCommandSettings, ICostSettings
[CommandOption("--priceApiBaseAddress <BASE_ADDRESS>")]
[Description("The base address for the Price API. Defaults to https://prices.azure.com/")]
public string PriceApiAddress { get; set; } = "https://prices.azure.com/";


[CommandOption("--httpTimeout <TIMEOUT>")]
[Description("Allows overriding the default HTTP timeout in seconds. Defaults to 100 seconds.")]
public int HttpTimeout { get; set; } = 100;

public Scope GetScope
{
Expand Down
5 changes: 3 additions & 2 deletions src/Commands/DailyCost/DailyCost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ public override async Task<int> ExecuteAsync(CommandContext context, DailyCostSe


_costRetriever.CostApiAddress = settings.CostApiAddress;

_costRetriever.HttpTimeout = TimeSpan.FromSeconds(settings.HttpTimeout);

// Get the subscription ID from the settings
var subscriptionId = settings.Subscription;

Expand Down Expand Up @@ -90,7 +91,7 @@ public override async Task<int> ExecuteAsync(CommandContext context, DailyCostSe
IEnumerable<CostDailyItem> dailyCost = new List<CostDailyItem>();

// if output format is not csv, json, or jsonc, then don't include tags
if (settings.Output != OutputFormat.Json &&
if (settings.Output != OutputFormat.Json &&
settings.Output != OutputFormat.Jsonc &&
settings.Output != OutputFormat.Csv)
{
Expand Down
1 change: 1 addition & 0 deletions src/Commands/DetectAnomaly/DetectAnomaly.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public override async Task<int> ExecuteAsync(CommandContext context, DetectAnoma
if (settings.Debug)
AnsiConsole.WriteLine($"Version: {typeof(AccumulatedCostCommand).Assembly.GetName().Version}");
_costRetriever.CostApiAddress = settings.CostApiAddress;
_costRetriever.HttpTimeout = TimeSpan.FromSeconds(settings.HttpTimeout);

// Get the subscription ID from the settings
var subscriptionId = settings.Subscription;
Expand Down
Loading

0 comments on commit ddd3ba0

Please sign in to comment.