CoolFace
Apppublic

Yog965/grc-ai-command-deck

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
phase1_data_engineering.py45 linesDownload Raw Back to root
1"""Phase 1: Fetch NIST controls and generate synthetic CloudTrail logs."""2 3from __future__ import annotations4 5import argparse6from pathlib import Path7 8from grc_ai_pipeline import (9    DEFAULT_NIST_JSON_URL,10    fetch_nist_controls,11    generate_synthetic_cloudtrail_logs,12    save_controls,13)14 15 16def parse_args() -> argparse.Namespace:17    parser = argparse.ArgumentParser(description="Phase 1 - Data Engineering")18    parser.add_argument("--nist-source-url", default=DEFAULT_NIST_JSON_URL)19    parser.add_argument("--logs-count", type=int, default=1000)20    parser.add_argument("--output-dir", type=Path, default=Path("outputs_phase1"))21    return parser.parse_args()22 23 24def main() -> None:25    args = parse_args()26    args.output_dir.mkdir(parents=True, exist_ok=True)27 28    controls_df = fetch_nist_controls(args.nist_source_url)29    controls_json = args.output_dir / "nist_controls_rev5.json"30    controls_csv = args.output_dir / "nist_controls_rev5.csv"31    save_controls(controls_df, controls_json, controls_csv)32 33    logs_df = generate_synthetic_cloudtrail_logs(n_logs=args.logs_count)34    logs_csv = args.output_dir / "synthetic_cloudtrail_logs.csv"35    logs_df.to_csv(logs_csv, index=False)36 37    print("Phase 1 complete:")38    print(f"- Controls JSON: {controls_json}")39    print(f"- Controls CSV:  {controls_csv}")40    print(f"- Logs CSV:      {logs_csv}")41 42 43if __name__ == "__main__":44    main()45