Skip to content

Conversation

@zMynxx
Copy link
Contributor

@zMynxx zMynxx commented Oct 18, 2025

PR Type

Enhancement, Bug fix


Description

  • Add include_free_tier parameter to exclude AWS Lambda free tier benefits

  • Format pricing rates with 8 decimal places for improved precision

  • Update CLI with --free-tier flag to control free tier inclusion

  • Enhance introduction documentation with clearer project narrative


Diagram Walkthrough

flowchart LR
  A["User Input"] -->|"--free-tier flag"| B["CLI Parser"]
  B -->|"include_free_tier param"| C["Lambda Calculator"]
  C -->|"Rate formatting"| D["Cost Calculation"]
  D -->|"Formatted output"| E["Result"]
Loading

File Walkthrough

Relevant files
Enhancement
calculator.py
Format pricing rates with 8 decimal precision                       

aws-lambda-calculator/src/aws_lambda_calculator/calculator.py

  • Format pricing rates (rate, overflow_rate, requests_cost_factor,
    ephemeral_storage_cost_factor) with .8f format specifier for 8 decimal
    precision
  • Applied formatting consistently across tiered cost calculation,
    request charges, and ephemeral storage charge logging and step
    tracking
+8/-8     
aws_lambda.py
Add include_free_tier parameter handling                                 

src/aws_lambda.py

  • Extract include_free_tier parameter from payload with default value
    True
  • Pass include_free_tier parameter to calculator function call
+2/-0     
cli.py
Add CLI flag for free tier control                                             

src/cli.py

  • Add new --free-tier command-line argument accepting "true" or "false"
    choices with default "true"
  • Convert string argument to boolean and pass to calculator function
  • Provides users ability to exclude free tier benefits from cost
    calculations
+10/-0   
Formatting
install-usage.tsx
Fix file ending newline                                                                   

site/app/routes/install-usage.tsx

  • Add newline at end of file for proper file formatting
+1/-1     
Documentation
introduction.tsx
Enhance introduction narrative and clarity                             

site/app/routes/introduction.tsx

  • Consolidate backstory paragraphs into single cohesive narrative
  • Enhance problem statement with clearer description of calculator
    limitations
  • Add personal motivation and community contribution message
  • Improve readability with better paragraph structure and line breaks
+9/-9     

Copilot AI review requested due to automatic review settings October 18, 2025 14:36
@codiumai-pr-agent-free
Copy link
Contributor

codiumai-pr-agent-free bot commented Oct 18, 2025

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
- [ ] Create ticket/issue <!-- /create_ticket --create_ticket=true -->

</details></td></tr>
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
No custom compliance provided

Follow the guide to enable custom compliance check.

  • Update
Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements functionality to exclude AWS Lambda free tier benefits from cost calculations. The changes add a new command-line flag --free-tier that allows users to toggle whether free tier benefits should be included in the cost estimation.

  • Added --free-tier CLI argument with choices "true"/"false" and default "true"
  • Updated both CLI and Lambda function handlers to pass the free tier flag to the calculator
  • Enhanced calculation logging with improved decimal precision for cost factors
  • Updated introduction page content with better formatting and clarity

Reviewed Changes

Copilot reviewed 4 out of 5 changed files in this pull request and generated 2 comments.

File Description
src/cli.py Added --free-tier argument and passed it to the calculator function
src/aws_lambda.py Extended Lambda handler to accept and forward the include_free_tier parameter
site/app/routes/introduction.tsx Improved content formatting and readability in the backstory section
aws-lambda-calculator/src/aws_lambda_calculator/calculator.py Enhanced logging precision by formatting cost factors to 8 decimal places

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@github-actions
Copy link
Contributor

github-actions bot commented Oct 18, 2025

☂️ Python Coverage

current status: ✅

Overall Coverage

Lines Covered Coverage Threshold Status
458 457 100% 0% 🟢

New Files

No new covered files...

Modified Files

No covered modified files...

updated for commit: 43f842e by action🐍

@codiumai-pr-agent-free
Copy link
Contributor

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: integration-tests / Integration Tests

Failed stage: Test the new package [❌]

Failed test name: TestCoverageGaps.test_calculate_tiered_cost_with_massive_overflow

Failure summary:

The action failed because the test test_calculate_tiered_cost_with_massive_overflow in
tests/test_coverage_gaps.py failed. The test expected to find a string containing "x 1.33334e-05
USD" in the calculation steps, but it wasn't found. The issue appears to be in the formatting of the
overflow rate in the calculator.py file, where it's using "0.00001333" instead of the expected
scientific notation format.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

581:  2025-10-18 14:36:35,942 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 18.68059236111 USD
582:  2025-10-18 14:36:35,942 aws_lambda_calculator.calculator DEBUG    [calculator.py:251] - 30416666 requests - 1000000 free tier requests = 29416666 monthly billable requests
583:  2025-10-18 14:36:35,942 aws_lambda_calculator.calculator DEBUG    [calculator.py:257] - 29416666 requests x 0.00000020 USD = 5.8833332 USD (monthly request charges)
584:  2025-10-18 14:36:35,942 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 5.8833332 USD
585:  2025-10-18 14:36:35,942 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 10.0 GB - 0.5 GB (no additional charges) = 9.5 GB (billable ephemeral storage)
586:  2025-10-18 14:36:35,942 aws_lambda_calculator.calculator DEBUG    [calculator.py:282] - 9.5 GB x1520833.3 seconds = 14447916.35 total storage (GB-s)
587:  2025-10-18 14:36:35,942 aws_lambda_calculator.calculator DEBUG    [calculator.py:285] - 14447916.35 GB x 0.00000003 USD = 0.446440615215 USD (monthly ephemeral storage charges)
588:  2025-10-18 14:36:35,942 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 0.446440615215 USD
589:  2025-10-18 14:36:35,943 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 18.68059236111 USD + 5.8833332 USD + 0.446440615215 USD = 25.010366176325 USD
590:  2025-10-18 14:36:35,943 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 25.010366176325 USD
591:  2025-10-18 14:36:35,943 aws_lambda_calculator INFO     [cli.py:179] - Total cost: 25.010366 USD
592:  2025-10-18 14:36:35,943 aws_lambda_calculator INFO     [cli.py:180] - Execution completed successfully.
593:  PASSED
594:  tests/test_cli.py::test_cli_invalid_region CLI output: 
595:  exit code: 2, stderr: usage: aws_lambda_calculator 1.0 [options]
596:  aws_lambda_calculator 1.0: error: argument -r/--region: invalid choice: 'invalid-region' (choose from af-south-1, ap-east-1, ap-east-2, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-south-2, ap-southeast-1, ap-southeast-2, ap-southeast-3, ap-southeast-4, ap-southeast-5, ap-southeast-7, ca-central-1, ca-west-1, eu-central-1, eu-central-2, eu-north-1, eu-south-1, eu-south-2, eu-west-1, eu-west-2, eu-west-3, il-central-1, me-central-1, me-south-1, mx-central-1, sa-east-1, us-east-1, us-east-2, us-gov-east-1, us-gov-west-1, us-west-1, us-west-2)
597:  PASSED
...

613:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 18.68059236111 USD
614:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:251] - 30416666 requests - 1000000 free tier requests = 29416666 monthly billable requests
615:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:257] - 29416666 requests x 0.00000020 USD = 5.8833332 USD (monthly request charges)
616:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 5.8833332 USD
617:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 10.0 GB - 0.5 GB (no additional charges) = 9.5 GB (billable ephemeral storage)
618:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:282] - 9.5 GB x1520833.3 seconds = 14447916.35 total storage (GB-s)
619:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:285] - 14447916.35 GB x 0.00000003 USD = 0.446440615215 USD (monthly ephemeral storage charges)
620:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 0.446440615215 USD
621:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 18.68059236111 USD + 5.8833332 USD + 0.446440615215 USD = 25.010366176325 USD
622:  2025-10-18 14:36:36,283 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 25.010366176325 USD
623:  2025-10-18 14:36:36,283 aws_lambda_calculator INFO     [cli.py:179] - Total cost: 25.010366 USD
624:  2025-10-18 14:36:36,283 aws_lambda_calculator INFO     [cli.py:180] - Execution completed successfully.
625:  PASSED
626:  tests/test_cli.py::test_cli_missing_argument CLI output: 
627:  exit code: 2, stderr: usage: aws_lambda_calculator 1.0 [options]
628:  aws_lambda_calculator 1.0: error: the following arguments are required: -es/--ephemeral-storage, -esu/--storage-unit
629:  PASSED
...

677:  Amount of ephemeral storage (default: None)
678:  -esu, --storage-unit {GB,MB}
679:  Storage unit (GB or MB) (default: None)
680:  -v, --verbose         Enable verbose logging (default: False)
681:  --free-tier {true,false}
682:  Include AWS Lambda free tier benefits (default: true)
683:  (default: true)
684:  -V, --version         Show the version of the CLI tool
685:  Thanks for using the CLI tool! For more information, visit the project
686:  repository.
687:  exit code: 0, stderr: 
688:  PASSED
689:  tests/test_cli.py::test_cli_version CLI version output: aws_lambda_calculator 1.0 1.0
690:  exit code: 0, stderr: 
691:  PASSED
692:  2025-10-18 14:36:37,002 aws_lambda_calculator.calculator ERROR    [calculator.py:19] - Cost factors file for region 'invalid-region-999' not found.
693:  tests/test_coverage_gaps.py::TestCoverageGaps::test_open_json_file_invalid_region PASSED
...

712:  2025-10-18 14:36:37,014 aws_lambda_calculator.calculator DEBUG    [calculator.py:119] - Amount of ephemeral storage allocated: 512 MB * 0.0009765625 GB in MB = 0.5 GB
713:  2025-10-18 14:36:37,014 aws_lambda_calculator.calculator DEBUG    [calculator.py:389] - Pricing calculations:
714:  2025-10-18 14:36:37,014 aws_lambda_calculator.calculator DEBUG    [calculator.py:199] - 1 requests x 100 ms x 0.001 ms to sec conversion factor = 0.1 total compute (seconds)
715:  2025-10-18 14:36:37,014 aws_lambda_calculator.calculator DEBUG    [calculator.py:207] - 0.125 GB x 0.1 seconds = 0.0125 total compute (GB-s)
716:  2025-10-18 14:36:37,014 aws_lambda_calculator.calculator DEBUG    [calculator.py:222] - 0.0125 GB-s - 400000 free tier GB-s = 0.0 billable GB-s
717:  2025-10-18 14:36:37,015 aws_lambda_calculator.calculator DEBUG    [calculator.py:227] - Tiered price for: 0.0 GB-s
718:  2025-10-18 14:36:37,015 aws_lambda_calculator.calculator DEBUG    [calculator.py:158] - 0.0 GB-s x 0.00001667 USD = 0.0 USD
719:  2025-10-18 14:36:37,015 aws_lambda_calculator.calculator DEBUG    [calculator.py:163] - Total tier cost: 0.0 USD (Monthly compute charges)
720:  2025-10-18 14:36:37,015 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 0.0 USD
721:  2025-10-18 14:36:37,015 aws_lambda_calculator.calculator DEBUG    [calculator.py:251] - 1 requests - 1000000 free tier requests = 0 monthly billable requests
722:  2025-10-18 14:36:37,015 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 0.0 USD
723:  2025-10-18 14:36:37,016 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 0.5 GB - 0.5 GB (no additional charges) = 0.0 GB (billable ephemeral storage)
724:  2025-10-18 14:36:37,016 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 0.0 USD
725:  2025-10-18 14:36:37,016 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 0.0 USD + 0.0 USD + 0.0 USD = 0.0 USD
726:  2025-10-18 14:36:37,016 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 0.0 USD
727:  tests/test_coverage_gaps.py::TestCoverageGaps::test_calculate_with_architecture_none_error PASSED
728:  2025-10-18 14:36:37,018 aws_lambda_calculator.calculator INFO     [calculator.py:361] - Starting cost calculation...
...

829:  2025-10-18 14:36:37,046 aws_lambda_calculator.calculator DEBUG    [calculator.py:227] - Tiered price for: 900000000.0 GB-s
830:  2025-10-18 14:36:37,046 aws_lambda_calculator.calculator DEBUG    [calculator.py:158] - 900000000.0 GB-s x 0.00001667 USD = 15000.03 USD
831:  2025-10-18 14:36:37,046 aws_lambda_calculator.calculator DEBUG    [calculator.py:163] - Total tier cost: 15000.03 USD (Monthly compute charges)
832:  2025-10-18 14:36:37,046 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 15000.03 USD
833:  2025-10-18 14:36:37,046 aws_lambda_calculator.calculator DEBUG    [calculator.py:257] - 100000 requests x 0.00000020 USD = 0.02 USD (monthly request charges)
834:  2025-10-18 14:36:37,047 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 0.02 USD
835:  2025-10-18 14:36:37,047 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 0.5 GB - 0.5 GB (no additional charges) = 0.0 GB (billable ephemeral storage)
836:  2025-10-18 14:36:37,047 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 0.0 USD
837:  2025-10-18 14:36:37,047 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 15000.03 USD + 0.02 USD + 0.0 USD = 15000.050000000001 USD
838:  2025-10-18 14:36:37,047 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 15000.050000000001 USD
839:  tests/test_coverage_gaps.py::TestCoverageGaps::test_ultra_high_usage_for_overflow_coverage PASSED
840:  2025-10-18 14:36:37,049 aws_lambda_calculator.calculator DEBUG    [calculator.py:158] - 6000000000.0 GB-s x 0.00001667 USD = 100000.20000000001 USD
841:  2025-10-18 14:36:37,049 aws_lambda_calculator.calculator DEBUG    [calculator.py:158] - 9000000000.0 GB-s x 0.00001500 USD = 135000.0 USD
842:  2025-10-18 14:36:37,049 aws_lambda_calculator.calculator DEBUG    [calculator.py:170] - 5000000000.0 GB-s x 0.00001333 USD = 66667.0 USD
843:  2025-10-18 14:36:37,049 aws_lambda_calculator.calculator DEBUG    [calculator.py:178] - Total tier cost: 301667.2 USD (Monthly compute charges)
844:  tests/test_coverage_gaps.py::TestCoverageGaps::test_calculate_tiered_cost_with_massive_overflow FAILED
845:  tests/test_edge_cases.py::TestEdgeCases::test_minimal_requests_per_month PASSED
...

1327:  2025-10-18 14:36:37,351 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 0.0 USD
1328:  2025-10-18 14:36:37,352 aws_lambda_calculator.calculator DEBUG    [calculator.py:251] - 730000 requests - 1000000 free tier requests = 0 monthly billable requests
1329:  2025-10-18 14:36:37,352 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 0.0 USD
1330:  2025-10-18 14:36:37,352 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 1 GB - 0.5 GB (no additional charges) = 0.5 GB (billable ephemeral storage)
1331:  2025-10-18 14:36:37,352 aws_lambda_calculator.calculator DEBUG    [calculator.py:282] - 0.5 GB x73000.0 seconds = 36500.0 total storage (GB-s)
1332:  2025-10-18 14:36:37,352 aws_lambda_calculator.calculator DEBUG    [calculator.py:285] - 36500.0 GB x 0.00000003 USD = 0.00112785 USD (monthly ephemeral storage charges)
1333:  2025-10-18 14:36:37,353 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 0.00112785 USD
1334:  2025-10-18 14:36:37,353 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 0.0 USD + 0.0 USD + 0.00112785 USD = 0.00112785 USD
1335:  2025-10-18 14:36:37,353 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 0.00112785 USD
1336:  tests/test_edge_cases.py::TestEdgeCases::test_mixed_units_combinations PASSED
1337:  tests/test_edge_cases.py::TestEdgeCases::test_cli_with_float_memory_values PASSED
1338:  2025-10-18 14:36:37,527 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1339:  2025-10-18 14:36:37,527 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {
1340:  "body": "invalid json {"
1341:  }
1342:  2025-10-18 14:36:37,527 aws_lambda_calculator ERROR    [aws_lambda.py:96] - Error processing request: Expecting value: line 1 column 1 (char 0)
1343:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_invalid_json_body PASSED
1344:  2025-10-18 14:36:37,529 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1345:  2025-10-18 14:36:37,529 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {}
1346:  2025-10-18 14:36:37,529 aws_lambda_calculator ERROR    [aws_lambda.py:90] - Missing required field: 'region'
1347:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_empty_body PASSED
1348:  2025-10-18 14:36:37,531 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1349:  2025-10-18 14:36:37,531 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {
1350:  "body": "{\"region\": \"us-east-1\", \"architecture\": \"invalid-arch\", \"number_of_requests\": 1000, \"request_unit\": \"per hour\", \"duration_of_each_request_in_ms\": 100, \"memory\": 512, \"memory_unit\": \"MB\", \"ephemeral_storage\": 512, \"storage_unit\": \"MB\"}"
1351:  }
1352:  2025-10-18 14:36:37,531 aws_lambda_calculator INFO     [aws_lambda.py:70] - Calculating cost...
1353:  2025-10-18 14:36:37,531 aws_lambda_calculator ERROR    [aws_lambda.py:96] - Error processing request: 1 validation error for CalculationRequest
1354:  architecture
1355:  Input should be 'x86' or 'arm64' [type=literal_error, input_value='invalid-arch', input_type=str]
1356:  For further information visit https://errors.pydantic.dev/2.12/v/literal_error
1357:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_pydantic_validation_error PASSED
1358:  2025-10-18 14:36:37,533 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1359:  2025-10-18 14:36:37,533 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {
1360:  "body": "{\"architecture\": \"x86\", \"number_of_requests\": 1000, \"request_unit\": \"per hour\", \"duration_of_each_request_in_ms\": 100, \"memory\": 512, \"memory_unit\": \"MB\", \"ephemeral_storage\": 512, \"storage_unit\": \"MB\"}"
1361:  }
1362:  2025-10-18 14:36:37,533 aws_lambda_calculator ERROR    [aws_lambda.py:90] - Missing required field: 'region'
1363:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_missing_region_field PASSED
1364:  2025-10-18 14:36:37,535 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1365:  2025-10-18 14:36:37,535 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {
1366:  "body": "{\"region\": \"us-east-1\", \"number_of_requests\": 1000, \"request_unit\": \"per hour\", \"duration_of_each_request_in_ms\": 100, \"memory\": 512, \"memory_unit\": \"MB\", \"ephemeral_storage\": 512, \"storage_unit\": \"MB\"}"
1367:  }
1368:  2025-10-18 14:36:37,535 aws_lambda_calculator ERROR    [aws_lambda.py:90] - Missing required field: 'architecture'
1369:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_missing_architecture_field PASSED
1370:  2025-10-18 14:36:37,537 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1371:  2025-10-18 14:36:37,537 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {
1372:  "body": "{\"region\": \"us-east-1\", \"architecture\": \"x86\", \"number_of_requests\": 1000, \"request_unit\": \"per hour\", \"duration_of_each_request_in_ms\": 100, \"memory_unit\": \"MB\", \"ephemeral_storage\": 512, \"storage_unit\": \"MB\"}"
1373:  }
1374:  2025-10-18 14:36:37,537 aws_lambda_calculator ERROR    [aws_lambda.py:90] - Missing required field: 'memory'
1375:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_missing_memory_field PASSED
1376:  2025-10-18 14:36:37,540 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1377:  2025-10-18 14:36:37,540 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {
1378:  "body": "{\"region\": \"us-east-1\", \"architecture\": \"x86\", \"number_of_requests\": 1000, \"request_unit\": \"per hour\", \"duration_of_each_request_in_ms\": 100, \"memory\": 512, \"memory_unit\": \"MB\", \"ephemeral_storage\": 512, \"storage_unit\": \"MB\"}"
1379:  }
1380:  2025-10-18 14:36:37,540 aws_lambda_calculator INFO     [aws_lambda.py:70] - Calculating cost...
1381:  2025-10-18 14:36:37,540 aws_lambda_calculator ERROR    [aws_lambda.py:96] - Error processing request: Calculation error
1382:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_calculation_exception PASSED
1383:  2025-10-18 14:36:37,542 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
...

1393:  2025-10-18 14:36:37,544 aws_lambda_calculator.calculator DEBUG    [calculator.py:119] - Amount of ephemeral storage allocated: 512 MB * 0.0009765625 GB in MB = 0.5 GB
1394:  2025-10-18 14:36:37,544 aws_lambda_calculator.calculator DEBUG    [calculator.py:389] - Pricing calculations:
1395:  2025-10-18 14:36:37,544 aws_lambda_calculator.calculator DEBUG    [calculator.py:199] - 730000 requests x 100 ms x 0.001 ms to sec conversion factor = 73000.0 total compute (seconds)
1396:  2025-10-18 14:36:37,545 aws_lambda_calculator.calculator DEBUG    [calculator.py:207] - 0.5 GB x 73000.0 seconds = 36500.0 total compute (GB-s)
1397:  2025-10-18 14:36:37,545 aws_lambda_calculator.calculator DEBUG    [calculator.py:222] - 36500.0 GB-s - 400000 free tier GB-s = 0.0 billable GB-s
1398:  2025-10-18 14:36:37,545 aws_lambda_calculator.calculator DEBUG    [calculator.py:227] - Tiered price for: 0.0 GB-s
1399:  2025-10-18 14:36:37,545 aws_lambda_calculator.calculator DEBUG    [calculator.py:158] - 0.0 GB-s x 0.00001667 USD = 0.0 USD
1400:  2025-10-18 14:36:37,545 aws_lambda_calculator.calculator DEBUG    [calculator.py:163] - Total tier cost: 0.0 USD (Monthly compute charges)
1401:  2025-10-18 14:36:37,546 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 0.0 USD
1402:  2025-10-18 14:36:37,546 aws_lambda_calculator.calculator DEBUG    [calculator.py:251] - 730000 requests - 1000000 free tier requests = 0 monthly billable requests
1403:  2025-10-18 14:36:37,546 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 0.0 USD
1404:  2025-10-18 14:36:37,546 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 0.5 GB - 0.5 GB (no additional charges) = 0.0 GB (billable ephemeral storage)
1405:  2025-10-18 14:36:37,546 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 0.0 USD
1406:  2025-10-18 14:36:37,547 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 0.0 USD + 0.0 USD + 0.0 USD = 0.0 USD
1407:  2025-10-18 14:36:37,547 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 0.0 USD
1408:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_verbose_false_no_steps PASSED
1409:  2025-10-18 14:36:37,548 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
...

1419:  2025-10-18 14:36:37,550 aws_lambda_calculator.calculator DEBUG    [calculator.py:119] - Amount of ephemeral storage allocated: 512 MB * 0.0009765625 GB in MB = 0.5 GB
1420:  2025-10-18 14:36:37,550 aws_lambda_calculator.calculator DEBUG    [calculator.py:389] - Pricing calculations:
1421:  2025-10-18 14:36:37,551 aws_lambda_calculator.calculator DEBUG    [calculator.py:199] - 730000 requests x 100 ms x 0.001 ms to sec conversion factor = 73000.0 total compute (seconds)
1422:  2025-10-18 14:36:37,551 aws_lambda_calculator.calculator DEBUG    [calculator.py:207] - 0.5 GB x 73000.0 seconds = 36500.0 total compute (GB-s)
1423:  2025-10-18 14:36:37,551 aws_lambda_calculator.calculator DEBUG    [calculator.py:222] - 36500.0 GB-s - 400000 free tier GB-s = 0.0 billable GB-s
1424:  2025-10-18 14:36:37,551 aws_lambda_calculator.calculator DEBUG    [calculator.py:227] - Tiered price for: 0.0 GB-s
1425:  2025-10-18 14:36:37,552 aws_lambda_calculator.calculator DEBUG    [calculator.py:158] - 0.0 GB-s x 0.00001667 USD = 0.0 USD
1426:  2025-10-18 14:36:37,552 aws_lambda_calculator.calculator DEBUG    [calculator.py:163] - Total tier cost: 0.0 USD (Monthly compute charges)
1427:  2025-10-18 14:36:37,552 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 0.0 USD
1428:  2025-10-18 14:36:37,552 aws_lambda_calculator.calculator DEBUG    [calculator.py:251] - 730000 requests - 1000000 free tier requests = 0 monthly billable requests
1429:  2025-10-18 14:36:37,552 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 0.0 USD
1430:  2025-10-18 14:36:37,553 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 0.5 GB - 0.5 GB (no additional charges) = 0.0 GB (billable ephemeral storage)
1431:  2025-10-18 14:36:37,553 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 0.0 USD
1432:  2025-10-18 14:36:37,553 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 0.0 USD + 0.0 USD + 0.0 USD = 0.0 USD
1433:  2025-10-18 14:36:37,553 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 0.0 USD
1434:  tests/test_error_handling.py::TestLambdaErrorHandling::test_lambda_response_headers PASSED
1435:  tests/test_error_handling.py::TestCLIErrorHandling::test_cli_pydantic_validation_error_handling PASSED
1436:  tests/test_error_handling.py::TestCLIErrorHandling::test_cli_invalid_memory_range PASSED
1437:  tests/test_error_handling.py::TestCLIErrorHandling::test_cli_invalid_ephemeral_storage_range PASSED
1438:  tests/test_error_handling.py::TestCLIErrorHandling::test_cli_zero_requests PASSED
1439:  tests/test_error_handling.py::TestCLIErrorHandling::test_cli_zero_duration PASSED
1440:  tests/test_error_handling.py::TestCLIErrorHandling::test_cli_with_gb_units PASSED
1441:  tests/test_error_handling.py::TestCLIErrorHandling::test_cli_with_million_requests PASSED
1442:  2025-10-18 14:36:38,762 aws_lambda_calculator.calculator INFO     [calculator.py:361] - Starting cost calculation...
...

1693:  2025-10-18 14:36:38,836 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 18.68059236111 USD
1694:  2025-10-18 14:36:38,836 aws_lambda_calculator.calculator DEBUG    [calculator.py:251] - 30416666 requests - 1000000 free tier requests = 29416666 monthly billable requests
1695:  2025-10-18 14:36:38,836 aws_lambda_calculator.calculator DEBUG    [calculator.py:257] - 29416666 requests x 0.00000020 USD = 5.8833332 USD (monthly request charges)
1696:  2025-10-18 14:36:38,836 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 5.8833332 USD
1697:  2025-10-18 14:36:38,836 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 10 GB - 0.5 GB (no additional charges) = 9.5 GB (billable ephemeral storage)
1698:  2025-10-18 14:36:38,837 aws_lambda_calculator.calculator DEBUG    [calculator.py:282] - 9.5 GB x1520833.3 seconds = 14447916.35 total storage (GB-s)
1699:  2025-10-18 14:36:38,837 aws_lambda_calculator.calculator DEBUG    [calculator.py:285] - 14447916.35 GB x 0.00000003 USD = 0.446440615215 USD (monthly ephemeral storage charges)
1700:  2025-10-18 14:36:38,837 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 0.446440615215 USD
1701:  2025-10-18 14:36:38,837 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 18.68059236111 USD + 5.8833332 USD + 0.446440615215 USD = 25.010366176325 USD
1702:  2025-10-18 14:36:38,837 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 25.010366176325 USD
1703:  tests/test_lambda.py::test_lambda_success PASSED
1704:  2025-10-18 14:36:38,839 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1705:  2025-10-18 14:36:38,839 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {
1706:  "body": "{\"region\": \"us-east-1\", \"architecture\": \"x86\", \"number_of_requests\": 1000000, \"request_unit\": \"per day\", \"memory\": 512, \"memory_unit\": \"MB\", \"ephemeral_storage\": 10, \"storage_unit\": \"GB\"}"
1707:  }
1708:  2025-10-18 14:36:38,839 aws_lambda_calculator ERROR    [aws_lambda.py:90] - Missing required field: 'duration_of_each_request_in_ms'
1709:  tests/test_lambda.py::test_lambda_missing_duration PASSED
1710:  2025-10-18 14:36:38,841 aws_lambda_calculator INFO     [aws_lambda.py:16] - Lambda function invoked.
1711:  2025-10-18 14:36:38,841 aws_lambda_calculator DEBUG    [aws_lambda.py:17] - Received event: {
1712:  "body": "{\"region\": \"us-east-1\", \"architecture\": \"x86\", \"number_of_requests\": 1000000, \"request_unit\": \"per day\", \"duration_of_each_request_in_ms\": 100, \"memory\": 512, \"memory_unit\": \"MB\", \"ephemeral_storage\": 10}"
1713:  }
1714:  2025-10-18 14:36:38,841 aws_lambda_calculator ERROR    [aws_lambda.py:90] - Missing required field: 'storage_unit'
1715:  tests/test_lambda.py::test_lambda_missing_storage_unit PASSED
...

1807:  2025-10-18 14:36:38,863 aws_lambda_calculator.calculator DEBUG    [calculator.py:222] - 876000000.0 GB-s - 400000 free tier GB-s = 875600000.0 billable GB-s
1808:  2025-10-18 14:36:38,863 aws_lambda_calculator.calculator DEBUG    [calculator.py:227] - Tiered price for: 875600000.0 GB-s
1809:  2025-10-18 14:36:38,864 aws_lambda_calculator.calculator DEBUG    [calculator.py:158] - 875600000.0 GB-s x 0.00001333 USD = 11674.72504 USD
1810:  2025-10-18 14:36:38,864 aws_lambda_calculator.calculator DEBUG    [calculator.py:163] - Total tier cost: 11674.72504 USD (Monthly compute charges)
1811:  2025-10-18 14:36:38,864 aws_lambda_calculator.calculator DEBUG    [calculator.py:399] - Monthly compute charges: 11674.72504 USD
1812:  2025-10-18 14:36:38,864 aws_lambda_calculator.calculator DEBUG    [calculator.py:251] - 219000000 requests - 1000000 free tier requests = 218000000 monthly billable requests
1813:  2025-10-18 14:36:38,864 aws_lambda_calculator.calculator DEBUG    [calculator.py:257] - 218000000 requests x 0.00000020 USD = 43.6 USD (monthly request charges)
1814:  2025-10-18 14:36:38,865 aws_lambda_calculator.calculator DEBUG    [calculator.py:404] - Monthly request charges: 43.6 USD
1815:  2025-10-18 14:36:38,865 aws_lambda_calculator.calculator DEBUG    [calculator.py:275] - 1 GB - 0.5 GB (no additional charges) = 0.5 GB (billable ephemeral storage)
1816:  2025-10-18 14:36:38,865 aws_lambda_calculator.calculator DEBUG    [calculator.py:282] - 0.5 GB x876000000.0 seconds = 438000000.0 total storage (GB-s)
1817:  2025-10-18 14:36:38,865 aws_lambda_calculator.calculator DEBUG    [calculator.py:285] - 438000000.0 GB x 0.00000003 USD = 13.5342 USD (monthly ephemeral storage charges)
1818:  2025-10-18 14:36:38,865 aws_lambda_calculator.calculator DEBUG    [calculator.py:409] - Monthly ephemeral storage charges: 13.5342 USD
1819:  2025-10-18 14:36:38,865 aws_lambda_calculator.calculator DEBUG    [calculator.py:422] - 11674.72504 USD + 43.6 USD + 13.5342 USD = 11731.85924 USD
1820:  2025-10-18 14:36:38,866 aws_lambda_calculator.calculator DEBUG    [calculator.py:428] - Lambda cost (monthly): 11731.85924 USD
1821:  tests/test_lambda.py::test_lambda_verbose_with_different_units PASSED
1822:  =================================== FAILURES ===================================
1823:  ______ TestCoverageGaps.test_calculate_tiered_cost_with_massive_overflow _______
...

1835:  overflow_rate = 0.0000133334
1836:  result = calculate_tiered_cost(
1837:  massive_usage, tier_structure, overflow_rate, steps
1838:  )
1839:  # Should have charged for both tiers plus overflow
1840:  # (6B * 0.0000166667) + (9B * 0.0000150000) + (5B * 0.0000133334)
1841:  tier1_cost = 6_000_000_000 * 0.0000166667
1842:  tier2_cost = 9_000_000_000 * 0.0000150000
1843:  overflow_cost = 5_000_000_000 * 0.0000133334
1844:  expected = tier1_cost + tier2_cost + overflow_cost
1845:  assert abs(result - expected) < 1.0  # Allow for floating point precision
1846:  # Should have steps for overflow calculation
1847:  >       assert any("x 1.33334e-05 USD" in step for step in steps)
1848:  E       assert False
1849:  E        +  where False = any(<generator object TestCoverageGaps.test_calculate_tiered_cost_with_massive_overflow.<locals>.<genexpr> at 0x7f04336b7440>)
1850:  tests/test_coverage_gaps.py:265: AssertionError
1851:  ------------------------------ Captured log call -------------------------------
...

1854:  DEBUG    aws_lambda_calculator.calculator:calculator.py:170 5000000000.0 GB-s x 0.00001333 USD = 66667.0 USD
1855:  DEBUG    aws_lambda_calculator.calculator:calculator.py:178 Total tier cost: 301667.2 USD (Monthly compute charges)
1856:  ================================ tests coverage ================================
1857:  _______________ coverage: platform linux, python 3.13.8-final-0 ________________
1858:  Name                                                            Stmts   Miss Branch BrPart  Cover   Missing
1859:  -----------------------------------------------------------------------------------------------------------
1860:  aws-lambda-calculator/src/aws_lambda_calculator/__init__.py         2      0      0      0   100%
1861:  aws-lambda-calculator/src/aws_lambda_calculator/calculator.py     165      1     42      2    99%   169->178, 371
1862:  aws-lambda-calculator/src/aws_lambda_calculator/models.py          31      4     16      6    79%   57, 58->63, 60, 65, 68->74, 70
1863:  src/aws_lambda.py                                                  44      0      8      0   100%
1864:  src/utils/__init__.py                                               0      0      0      0   100%
1865:  src/utils/logger.py                                                21      0      0      0   100%
1866:  tests/test_cli.py                                                  63      0      0      0   100%
1867:  tests/test_coverage_gaps.py                                        94      0      2      0   100%
1868:  tests/test_edge_cases.py                                           81      0      6      0   100%
1869:  tests/test_error_handling.py                                      105      0      0      0   100%
1870:  tests/test_free_tier.py                                            74      0      0      0   100%
1871:  tests/test_lambda.py                                               68      0      0      0   100%
1872:  -----------------------------------------------------------------------------------------------------------
1873:  TOTAL                                                             748      5     74      8    98%
1874:  Coverage XML written to file coverage.xml
1875:  =========================== short test summary info ============================
1876:  FAILED tests/test_coverage_gaps.py::TestCoverageGaps::test_calculate_tiered_cost_with_massive_overflow - assert False
1877:  +  where False = any(<generator object TestCoverageGaps.test_calculate_tiered_cost_with_massive_overflow.<locals>.<genexpr> at 0x7f04336b7440>)
1878:  ========================= 1 failed, 67 passed in 3.98s =========================
1879:  ##[error]Process completed with exit code 1.
1880:  Post job cleanup.

@github-actions
Copy link
Contributor

github-actions bot commented Oct 18, 2025

Coverage report

Click to see where and how coverage changed

FileStatementsMissingCoverageCoverage
(new stmts)
Lines missing
  aws-lambda-calculator/src/aws_lambda_calculator
  calculator.py
  aws-lambda-calculator/tests
  test_calculator.py
  test_pytest_generate_tests_sample_code.py
Project Total  

This report was generated by python-coverage-comment-action

@codiumai-pr-agent-free
Copy link
Contributor

codiumai-pr-agent-free bot commented Oct 18, 2025

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
General
Use a boolean action for flags

Refactor the --free-tier argument to use action="store_true" for more idiomatic
boolean flag handling in argparse. Consider renaming it to --exclude-free-tier
to simplify logic, where its presence would disable the free tier.

src/cli.py [134-140]

 parser.add_argument(
-    "--free-tier", 
-    type=str,
-    choices=["true", "false"],
-    default="true",
-    help="Include AWS Lambda free tier benefits (default: true)"
+    "--exclude-free-tier",
+    action="store_true",
+    help="Exclude AWS Lambda free tier benefits from the calculation."
 )
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly points out that using action="store_true" is a more idiomatic and robust way to handle boolean flags in argparse, improving the CLI's design and usability.

Medium
Format calculated costs for consistent precision

Format the calculated cost usage_in_tier * rate to 8 decimal places in the
f-string to match the formatting of the rate and ensure consistent precision in
the output.

aws-lambda-calculator/src/aws_lambda_calculator/calculator.py [158-159]

-logger.debug(f"{usage_in_tier} GB-s x {rate:.8f} USD = {usage_in_tier * rate} USD")
-steps.append(f"{usage_in_tier} GB-s x {rate:.8f} USD = {usage_in_tier * rate} USD")
+logger.debug(f"{usage_in_tier} GB-s x {rate:.8f} USD = {usage_in_tier * rate:.8f} USD")
+steps.append(f"{usage_in_tier} GB-s x {rate:.8f} USD = {usage_in_tier * rate:.8f} USD")
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies an inconsistency in the PR's formatting changes, where the calculated cost is not formatted, leading to potentially messy output.

Low
  • Update

zMynxx and others added 5 commits October 18, 2025 19:03
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Lior Dux <lior.dux@develeap.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Lior Dux <lior.dux@develeap.com>
@zMynxx zMynxx self-assigned this Oct 18, 2025
@zMynxx zMynxx linked an issue Oct 18, 2025 that may be closed by this pull request
@sonarqubecloud
Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@zMynxx zMynxx merged commit 24bb2fa into main Oct 18, 2025
13 of 14 checks passed
@zMynxx zMynxx deleted the fix/bug-exclude-free-tier branch October 18, 2025 16:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

add support for free-tier calculations

2 participants