greenmining 1.1.5__tar.gz → 1.1.6__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.
- {greenmining-1.1.5 → greenmining-1.1.6}/CHANGELOG.md +21 -0
- {greenmining-1.1.5/greenmining.egg-info → greenmining-1.1.6}/PKG-INFO +1 -1
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/__init__.py +1 -1
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/statistical_analyzer.py +2 -1
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/base.py +8 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/local_repo_analyzer.py +12 -9
- {greenmining-1.1.5 → greenmining-1.1.6/greenmining.egg-info}/PKG-INFO +1 -1
- {greenmining-1.1.5 → greenmining-1.1.6}/pyproject.toml +1 -1
- {greenmining-1.1.5 → greenmining-1.1.6}/LICENSE +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/MANIFEST.in +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/README.md +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/__main__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/__version__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/__init__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/code_diff_analyzer.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/metrics_power_correlator.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/power_regression.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/qualitative_analyzer.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/temporal_analyzer.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/analyzers/version_power_analyzer.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/config.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/controllers/__init__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/controllers/repository_controller.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/dashboard/__init__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/dashboard/app.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/__init__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/carbon_reporter.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/codecarbon_meter.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/cpu_meter.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/energy/rapl.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/gsf_patterns.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/__init__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/aggregated_stats.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/analysis_result.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/commit.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/models/repository.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/presenters/__init__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/presenters/console_presenter.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/__init__.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/commit_extractor.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/data_aggregator.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/data_analyzer.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/github_fetcher.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/github_graphql_fetcher.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/services/reports.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining/utils.py +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining.egg-info/SOURCES.txt +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining.egg-info/dependency_links.txt +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining.egg-info/requires.txt +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/greenmining.egg-info/top_level.txt +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/setup.cfg +0 -0
- {greenmining-1.1.5 → greenmining-1.1.6}/setup.py +0 -0
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.1.6] - 2026-01-31
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- EnergyMetrics property aliases (`energy_joules`, `average_power_watts`)
|
|
7
|
+
- Parallel energy measurement conflict with shared meter instance
|
|
8
|
+
- StatisticalAnalyzer timezone-aware date handling
|
|
9
|
+
- DataFrame column collision in pattern correlation analysis
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `since_date` / `to_date` parameters for date-bounded commit analysis
|
|
13
|
+
- `created_before` / `pushed_after` search filters
|
|
14
|
+
- Dashboard, GraphQL API, and experiment documentation pages
|
|
15
|
+
- Full process metrics and method-level metrics documentation
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- Energy measurement demonstrates all 4 backends: RAPL, CPU Meter, CodeCarbon, tracemalloc
|
|
19
|
+
- Removed all PyDriller references (replaced with gitpython + lizard)
|
|
20
|
+
|
|
21
|
+
### Removed
|
|
22
|
+
- Qualitative Validation and Carbon Footprint Reporting steps from experiment
|
|
23
|
+
|
|
3
24
|
## [0.1.12] - 2025-12-03
|
|
4
25
|
|
|
5
26
|
### Added
|
|
@@ -50,7 +50,8 @@ class StatisticalAnalyzer:
|
|
|
50
50
|
def temporal_trend_analysis(self, commits_df: pd.DataFrame) -> Dict[str, Any]:
|
|
51
51
|
# Analyze temporal trends in green awareness.
|
|
52
52
|
# Prepare time series data
|
|
53
|
-
commits_df["date"] = pd.to_datetime(commits_df["date"])
|
|
53
|
+
commits_df["date"] = pd.to_datetime(commits_df["date"], utc=True, errors="coerce")
|
|
54
|
+
commits_df["date"] = commits_df["date"].dt.tz_localize(None)
|
|
54
55
|
commits_df = commits_df.sort_values("date")
|
|
55
56
|
|
|
56
57
|
# Monthly aggregation
|
|
@@ -42,6 +42,14 @@ class EnergyMetrics:
|
|
|
42
42
|
start_time: Optional[datetime] = None
|
|
43
43
|
end_time: Optional[datetime] = None
|
|
44
44
|
|
|
45
|
+
@property
|
|
46
|
+
def energy_joules(self) -> float:
|
|
47
|
+
return self.joules
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def average_power_watts(self) -> float:
|
|
51
|
+
return self.watts_avg
|
|
52
|
+
|
|
45
53
|
def to_dict(self) -> Dict[str, Any]:
|
|
46
54
|
# Convert to dictionary.
|
|
47
55
|
return {
|
|
@@ -470,13 +470,16 @@ class LocalRepoAnalyzer:
|
|
|
470
470
|
|
|
471
471
|
colored_print(f" Cloning to: {local_path}", "cyan")
|
|
472
472
|
|
|
473
|
-
# Phase 2.2: Start energy measurement if enabled
|
|
473
|
+
# Phase 2.2: Start energy measurement if enabled (fresh meter per repo)
|
|
474
474
|
energy_result = None
|
|
475
|
-
|
|
475
|
+
energy_meter = None
|
|
476
|
+
if self.energy_tracking:
|
|
476
477
|
try:
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
478
|
+
from greenmining.energy.base import get_energy_meter
|
|
479
|
+
energy_meter = get_energy_meter(self.energy_backend)
|
|
480
|
+
energy_meter.start()
|
|
481
|
+
except Exception:
|
|
482
|
+
energy_meter = None
|
|
480
483
|
|
|
481
484
|
commits_analyzed = []
|
|
482
485
|
commit_count = 0
|
|
@@ -503,11 +506,11 @@ class LocalRepoAnalyzer:
|
|
|
503
506
|
colored_print(f" Analyzed {len(commits_analyzed)} commits", "green")
|
|
504
507
|
|
|
505
508
|
# Phase 2.2: Stop energy measurement
|
|
506
|
-
if
|
|
509
|
+
if energy_meter:
|
|
507
510
|
try:
|
|
508
|
-
energy_result =
|
|
509
|
-
except Exception
|
|
510
|
-
|
|
511
|
+
energy_result = energy_meter.stop()
|
|
512
|
+
except Exception:
|
|
513
|
+
pass
|
|
511
514
|
|
|
512
515
|
# Compute process metrics if enabled
|
|
513
516
|
process_metrics = {}
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "greenmining"
|
|
7
|
-
version = "1.1.
|
|
7
|
+
version = "1.1.6"
|
|
8
8
|
description = "An empirical Python library for Mining Software Repositories (MSR) in Green IT research"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|