service-capacity-modeling 0.3.102__tar.gz → 0.3.104__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/PKG-INFO +1 -1
  2. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/stateless_java.py +4 -0
  3. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/tools/capture_baseline_costs.py +33 -15
  4. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling.egg-info/PKG-INFO +1 -1
  5. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/LICENSE +0 -0
  6. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/README.md +0 -0
  7. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/__init__.py +0 -0
  8. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/capacity_planner.py +0 -0
  9. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/enum_utils.py +0 -0
  10. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/__init__.py +0 -0
  11. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/__init__.py +0 -0
  12. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/pricing/aws/3yr-reserved_ec2.json +0 -0
  13. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/pricing/aws/3yr-reserved_rds.json +0 -0
  14. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/pricing/aws/3yr-reserved_zz-overrides.json +0 -0
  15. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/profiles.txt +0 -0
  16. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c5.json +0 -0
  17. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c5a.json +0 -0
  18. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c5d.json +0 -0
  19. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c5n.json +0 -0
  20. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c6a.json +0 -0
  21. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c6i.json +0 -0
  22. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c6id.json +0 -0
  23. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c7a.json +0 -0
  24. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c7i.json +0 -0
  25. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_c8i.json +0 -0
  26. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_db_r6g.json +0 -0
  27. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_db_r6i.json +0 -0
  28. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_db_r7g.json +0 -0
  29. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_db_r7i.json +0 -0
  30. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_i3en.json +0 -0
  31. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_i4i.json +0 -0
  32. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_i7i.json +0 -0
  33. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m4.json +0 -0
  34. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m5.json +0 -0
  35. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m5n.json +0 -0
  36. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6a.json +0 -0
  37. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6i.json +0 -0
  38. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6id.json +0 -0
  39. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6idn.json +0 -0
  40. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m6in.json +0 -0
  41. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m7a.json +0 -0
  42. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m7i.json +0 -0
  43. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_m8i.json +0 -0
  44. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r4.json +0 -0
  45. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r5.json +0 -0
  46. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r5n.json +0 -0
  47. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6a.json +0 -0
  48. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6i.json +0 -0
  49. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6id.json +0 -0
  50. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6idn.json +0 -0
  51. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r6in.json +0 -0
  52. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r7a.json +0 -0
  53. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r7i.json +0 -0
  54. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/auto_r8i.json +0 -0
  55. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/manual_drives.json +0 -0
  56. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/manual_instances.json +0 -0
  57. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/hardware/profiles/shapes/aws/manual_services.json +0 -0
  58. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/interface.py +0 -0
  59. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/__init__.py +0 -0
  60. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/common.py +0 -0
  61. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/headroom_strategy.py +0 -0
  62. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/__init__.py +0 -0
  63. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/__init__.py +0 -0
  64. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/aurora.py +0 -0
  65. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/cassandra.py +0 -0
  66. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/control.py +0 -0
  67. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/counter.py +0 -0
  68. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/crdb.py +0 -0
  69. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/ddb.py +0 -0
  70. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/elasticsearch.py +0 -0
  71. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/entity.py +0 -0
  72. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/evcache.py +0 -0
  73. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/graphkv.py +0 -0
  74. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/iso_date_math.py +0 -0
  75. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/kafka.py +0 -0
  76. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/key_value.py +0 -0
  77. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/postgres.py +0 -0
  78. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/rds.py +0 -0
  79. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/time_series.py +0 -0
  80. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/time_series_config.py +0 -0
  81. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/wal.py +0 -0
  82. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/org/netflix/zookeeper.py +0 -0
  83. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/models/utils.py +0 -0
  84. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/stats.py +0 -0
  85. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/tools/__init__.py +0 -0
  86. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/tools/auto_shape.py +0 -0
  87. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/tools/data/__init__.py +0 -0
  88. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/tools/fetch_pricing.py +0 -0
  89. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/tools/generate_missing.py +0 -0
  90. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling/tools/instance_families.py +0 -0
  91. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling.egg-info/SOURCES.txt +0 -0
  92. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling.egg-info/dependency_links.txt +0 -0
  93. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling.egg-info/entry_points.txt +0 -0
  94. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling.egg-info/requires.txt +0 -0
  95. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/service_capacity_modeling.egg-info/top_level.txt +0 -0
  96. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/setup.cfg +0 -0
  97. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/setup.py +0 -0
  98. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_arguments.py +0 -0
  99. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_buffers.py +0 -0
  100. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_common.py +0 -0
  101. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_desire_merge.py +0 -0
  102. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_enum_utils.py +0 -0
  103. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_generate_scenarios.py +0 -0
  104. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_hardware.py +0 -0
  105. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_hardware_shapes.py +0 -0
  106. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_headroom_strategy.py +0 -0
  107. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_io2.py +0 -0
  108. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_model_dump.py +0 -0
  109. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_reproducible.py +0 -0
  110. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_simulation.py +0 -0
  111. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_utils.py +0 -0
  112. {service_capacity_modeling-0.3.102 → service_capacity_modeling-0.3.104}/tests/test_working_set.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: service-capacity-modeling
3
- Version: 0.3.102
3
+ Version: 0.3.104
4
4
  Summary: Contains utilities for modeling capacity for pluggable workloads
5
5
  Author: Joseph Lynch
6
6
  Author-email: josephl@netflix.com
@@ -113,6 +113,10 @@ def _estimate_java_app_region( # pylint: disable=too-many-positional-arguments
113
113
  cluster.cluster_type = "nflx-java-app"
114
114
  cluster.attached_drives = attached_drives
115
115
 
116
+ # Add drive cost (root volume is EBS and costs money)
117
+ drive_cost = sum(d.annual_cost for d in attached_drives) * cluster.count
118
+ cluster.annual_cost = cluster.annual_cost + drive_cost
119
+
116
120
  # Generally don't want giant clusters
117
121
  # Especially not above 1000 because some load balancers struggle
118
122
  # with such large clusters
@@ -19,6 +19,7 @@ from service_capacity_modeling.interface import (
19
19
  CapacityDesires,
20
20
  certain_float,
21
21
  certain_int,
22
+ ClusterCapacity,
22
23
  Consistency,
23
24
  DataShape,
24
25
  GlobalConsistency,
@@ -27,6 +28,27 @@ from service_capacity_modeling.interface import (
27
28
  )
28
29
 
29
30
 
31
+ def _format_cluster(cluster: ClusterCapacity, deployment: str) -> dict[str, Any]:
32
+ """Format a single cluster's details."""
33
+ info: dict[str, Any] = {
34
+ "cluster_type": cluster.cluster_type,
35
+ "deployment": deployment,
36
+ "instance": cluster.instance.name,
37
+ "count": cluster.count,
38
+ "annual_cost": float(cluster.annual_cost),
39
+ }
40
+
41
+ # Add attached drives if present
42
+ if cluster.attached_drives:
43
+ drives = []
44
+ for drive in cluster.attached_drives:
45
+ size_gib = int(drive.size_gib) if drive.size_gib else 0
46
+ drives.append(f"{drive.name} : {size_gib}GB")
47
+ info["attached_drives"] = sorted(drives)
48
+
49
+ return info
50
+
51
+
30
52
  def capture_costs(
31
53
  model_name: str,
32
54
  region: str,
@@ -48,31 +70,27 @@ def capture_costs(
48
70
  return {"error": "No capacity plans generated", "scenario": scenario_name}
49
71
 
50
72
  cap_plan = cap_plans[0]
51
- clusters = cap_plan.candidate_clusters
73
+ candidate = cap_plan.candidate_clusters
74
+
75
+ # Build cluster details for each cluster
76
+ cluster_details = []
77
+ for zonal_cluster in candidate.zonal:
78
+ cluster_details.append(_format_cluster(zonal_cluster, "zonal"))
79
+ for regional_cluster in candidate.regional:
80
+ cluster_details.append(_format_cluster(regional_cluster, "regional"))
52
81
 
53
82
  result = {
54
83
  "scenario": scenario_name,
55
84
  "model": model_name,
56
85
  "region": region,
57
86
  "service_tier": desires.service_tier,
87
+ "total_annual_cost": float(candidate.total_annual_cost),
88
+ "clusters": cluster_details,
58
89
  "annual_costs": dict(
59
- sorted((k, float(v)) for k, v in clusters.annual_costs.items())
90
+ sorted((k, float(v)) for k, v in candidate.annual_costs.items())
60
91
  ),
61
- "total_annual_cost": float(clusters.total_annual_cost),
62
- "cluster_count": len(clusters.zonal) + len(clusters.regional),
63
- "service_count": len(clusters.services),
64
92
  }
65
93
 
66
- # Add instance info
67
- if clusters.zonal:
68
- result["instance_name"] = clusters.zonal[0].instance.name
69
- result["instance_count"] = clusters.zonal[0].count
70
- result["deployment"] = "zonal"
71
- elif clusters.regional:
72
- result["instance_name"] = clusters.regional[0].instance.name
73
- result["instance_count"] = clusters.regional[0].count
74
- result["deployment"] = "regional"
75
-
76
94
  return result
77
95
  except (ValueError, KeyError, AttributeError) as e:
78
96
  return {"error": str(e), "scenario": scenario_name}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: service-capacity-modeling
3
- Version: 0.3.102
3
+ Version: 0.3.104
4
4
  Summary: Contains utilities for modeling capacity for pluggable workloads
5
5
  Author: Joseph Lynch
6
6
  Author-email: josephl@netflix.com