Free lesson · GenAI Solutions & Delivery

ADR governance dashboard மற்றும் compliance audit உருவாக்குங்கள்

நிறுவனம் முழுவதற்குமான architecture decision ஆரோக்கியம், coverage இடைவெளிகள் மற்றும் compliance நிலை குறித்த தெளிவான பார்வையை வழங்கும் ஒரு ADRGovernanceDashboard-ஐ நீங்கள் உருவாக்குவீர்கள். compute_coverage() கொண்ட CoverageAnalyzer-ஐ செயல்படுத்துங்கள்; இது service_id VARCHAR(64) PRIMARY KEY, service_name VARCHAR(128), team VARCHAR(64), deployed_at TIMESTAMPTZ, technology_stack JSONB, has_llm_integration BOOLEAN என்ற columns கொண்ட deployed_services PostgreSQL table-இலிருந்து system-இல் deploy செய்யப்பட்ட services-ஐ scan செய்து, architecture_decisions-உடன் cross-reference செய்து, தொடர்புடைய ADRs இல்லாத services-ஐ கண்டறிந்து, total_services: int, covered_services: int, coverage_pct: float, uncovered_services: list[UncoveredService] கொண்ட ஒரு ADRCoverageReport Pydantic model-ஐ திருப்பித் தரும்; இதில் ஒவ்வொன்றும் service_name: str, team: str, மற்றும் ஆவணப்படுத்தப்பட்ட decisions இல்லாமல் service-க்கு LLM integration உள்ளதா என்பதன் அடிப்படையில் risk_level: str கொண்டிருக்கும். Coverage சதவீதத்தை 60% (மஞ்சள்) மற்றும் 80% (பச்சை) என்ற thresholds கொண்ட ஒரு gauge-ஆகக் காட்டும் Grafana panel-ஐயும், risk அடிப்படையில் வரிசைப்படுத்தப்பட்ட uncovered services-ஐ பட்டியலிடும் ஒரு table-ஐயும் உருவாக்குங்கள். submit_for_review() கொண்ட ReviewWorkflowEngine-ஐ செயல்படுத்துங்கள்; இது ஒரு ADR-ஐ PROPOSED-இலிருந்து PENDING_REVIEW-க்கு மாற்றி, review_id VARCHAR(64) PRIMARY KEY, adr_id VARCHAR(64), reviewer VARCHAR(64), due_date TIMESTAMPTZ, status VARCHAR(16) (PENDING, APPROVED, REJECTED, EXPIRED), review_comment TEXT, reviewed_at TIMESTAMPTZ என்ற columns கொண்ட adr_reviews table-இல் ஒரு entry-ஐ உருவாக்கும். asyncio background task வழியாக தினசரி scheduled task-ஆக இயங்கும் check_expiry()-ஐ உருவாக்குங்கள்; இது due_date கடந்தும் review செயல்பாடு இல்லாத ADRs-ஐ EXPIRED எனக் குறித்து, adr_reviews_expired_total Prometheus counter-ஐ emit செய்யும். reviewer: str, review_comment: str கொண்ட ApprovalRequest-ஐ ஏற்றுக்கொள்ளும் POST /api/v1/adrs/{adr_id}/approve மற்றும் reviewer: str, review_comment: str, required_changes: list[str] கொண்ட RejectionRequest-ஐ ஏற்றுக்கொள்ளும் POST /api/v1/adrs/{adr_id}/reject-ஐ செயல்படுத்துங்கள். generate_report() கொண்ட ComplianceReportGenerator-ஐ உருவாக்குங்கள்; இது பின்வருவனவற்றைத் தொகுக்கும்: SELECT status, COUNT(*) FROM architecture_decisions GROUP BY status பயன்படுத்தி status வாரியான மொத்த ADRs, AVG(accepted_at - created_at) பயன்படுத்தி PROPOSED-இலிருந்து ACCEPTED வரையிலான சராசரி நேரம், coverage சதவீதம், stale ADR எண்ணிக்கை, dependency graph-இலிருந்து open conflicts எண்ணிக்கை; மேலும் report_id: str, generated_at: datetime, total_adrs: int, adrs_by_status: dict[str, int], avg_review_time_days: float, coverage_pct: float, stale_count: int, conflict_count: int, governance_score: float கொண்ட ஒரு GovernanceComplianceReport Pydantic model-ஐ வெளியிடும். Report-ஐ திருப்பித் தரும் GET /api/v1/governance/report endpoint-ஐ வெளிப்படுத்துங்கள். பின்வரும் panels கொண்ட ஒரு விரிவான Grafana dashboard-ஐ உருவாக்குங்கள்: ADR status distribution pie chart, coverage gauge, 90 நாட்களுக்கான staleness trend line, review pipeline funnel (PROPOSED -> PENDING -> APPROVED), மற்றும் conflict count time series. Coverage (40%), freshness (30%) மற்றும் conflict-free ratio (30%) ஆகியவற்றின் weighted average-ஆகக் கணக்கிடப்படும் adr_governance_score Prometheus gauge-ஐ emit செய்யுங்கள்.

Course: GenAI Architecture & Design Patterns · Chapter 1 · GenAI ADR Engine

Free to read — no subscription required.

அறிமுகம்

ADR இயங்குமுறையை இரண்டு தனித்துவமான வாசகர்களுக்கு — நேரடி நிலை தேவைப்படும் ஒரு ஆபரேட்டர் மற்றும் மாற்ற முடியாத ஸ்னாப்ஷாட் தேவைப்படும் ஒரு தணிக்கையாளர் — வெளிப்படுத்தாமல் உருவாக்கினால், ஆளுகைத் திட்டம் மூன்று மாதங்களுக்குப் பிறகு யாரும் மேற்கோள் காட்ட முடியாத ஒரே ஒரு நேரடிப் பக்கமாகச் சுருங்கிவிடும், மேலும் SOC 2 ஆதாரச் சேகரிப்பு ஒரு தொல்பொருள் ஆய்வுத் திட்டமாக மாறிவிடும். நேரடி டாஷ்போர்டையும் இணக்கக் கலைப்பொருளையும் (compliance artifact) ஒன்றாகக் கலக்கும் குழுக்கள், இரண்டு வாசகர்கள் ஒரு வாரம் இடைவெளியில் குறிப்புகளை ஒப்பிட்டு வெவ்வேறு எண்களைப் பார்க்கும் முதல் தருணத்திலேயே நம்பிக்கையை இழக்கின்றனர். இதன் முடிவில், ஒரே இணக்க மதிப்பீட்டியை (compliance evaluator) ஆபரேட்டர்களுக்கான Prometheus ஸ்கிரேப் பாதையாகவும், தணிக்கையாளர்களுக்கான ஹாஷ் செய்யப்பட்ட JSON-மற்றும்-markdown கலைப்பொருளாகவும் பிரிக்க உங்களால் முடியும், மேலும் அந்த இரண்டு மேற்பரப்புகளும் ஏன் ஒருபோதும் ஒரு கோட் பாதையைப் பகிர்ந்து கொள்ளக் கூடாது என்பதைப் பற்றியும் பகுத்தறிய முடியும்.

முக்கிய சொற்கள்

  • ComplianceReport: findings, பல-அச்சு fleet_counts, மற்றும் snapshot_hash ஆகியவற்றைக் கொண்ட வரிசைப்படுத்தக்கூடிய (serializable) தணிக்கைக் கலைப்பொருள்; இது CI காப்பகங்களுக்காக நியமன (canonical) JSON ஆகவும், தலைமைக்கான மின்னஞ்சலுக்காக markdown ஆகவும் வெளிப்படுத்தப்படுகிறது.
  • snapshot_hash: வரிசைப்படுத்தப்பட்ட-விசை (sort-keyed) அறிக்கை உடலின் மீது கணக்கிடப்படும் SHA-256 டைஜெஸ்ட்; இதன் மூலம் எந்தவொரு வாசகரும் காப்பகப்படுத்தப்பட்ட கலைப்பொருள் தலைமை பார்த்ததோடு பொருந்துகிறதா என்பதைச் சரிபார்க்க முடியும்.
  • செயல்பாட்டு/தணிக்கை எல்லை: நேரடி Prometheus ஏற்றுமதியாளர் (ஆபரேட்டருக்கான உண்மையின் மூலம்) மற்றும் ஹாஷ் செய்யப்பட்ட JSON-மற்றும்-markdown கலைப்பொருள் (தணிக்கையாளருக்கான உண்மையின் மூலம்) ஆகியவற்றுக்கு இடையேயான கடுமையான பிரிப்பு — இந்த இரண்டு மேற்பரப்புகளும் ஒருபோதும் ஒரு கோட் பாதையைப் பகிர்ந்து கொள்ளக் கூடாது.

கருத்துகள்

தணிக்கை இடைவெளி மற்றும் செயல்பாட்டு/தணிக்கை எல்லை

முழு ComplianceAuditor.audit இரண்டு சூழல்களில் இயங்குகிறது. முதலாவதாக, ADR பதிவக (registry) கோப்பகத்தைத் தொடும் main-க்கான ஒவ்வொரு merge-இலும் ஒரு CI படியாக — இதன் விளைவாக உருவாகும் JSON ஒரு build artifact ஆகப் பதிவேற்றப்படுகிறது, மேலும் markdown ஒரு PR கருத்தாகப் பதிவிடப்படுகிறது, இதனால் மதிப்பாய்வாளர்கள் merge-க்கு முன்பே இணக்கத் தாக்கத்தைப் பார்க்க முடியும். இரண்டாவதாக, இரவு 02:00 UTC-க்கு ஒவ்வொரு நாளும் இயங்கும் ஒரு Kubernetes CronJob ஆக — இது ஹாஷ் செய்யப்பட்ட JSON-ஐ தணிக்கைக் காப்பக bucket-இல் எழுதுகிறது, மேலும் ஒவ்வொரு மாதத்தின் முதல் நாளில் கூடுதலாக markdown-ஐ குழு மற்றும் உரிமையாளர் வாரியாகத் தொகுக்கப்பட்ட தலைமைக்கான மின்னஞ்சலாக வெளிப்படுத்துகிறது. CronJob தணிக்கையாளருக்கான உண்மையின் மூலம்; நேரடி ஏற்றுமதியாளர் ஆபரேட்டருக்கான உண்மையின் மூலம்.

தலைமைக்கான மின்னஞ்சல் முழுவதுமாக தணிக்கை அறிக்கையிலிருந்தே பெறப்படுகிறது — நேரடி ஏற்றுமதியாளரிடமிருந்து அல்ல — இதனால் CEO-வின் இன்பாக்ஸில் உள்ள எண்கள் bucket-இல் காப்பகப்படுத்தப்பட்ட JSON-உடனும், மின்னஞ்சலின் கீழே அச்சிடப்பட்ட ஹாஷுடனும் பொருந்துகின்றன. உரிமையாளர்-வாரியான தொகுப்பு அட்டவணை fleet_counts["reviewer"]-இலிருந்து இறங்கு வரிசையில் வருகிறது, ஒவ்வொரு வரிசையும் அந்த மதிப்பாய்வாளரின் ADR-களில் எத்தனை SLA-மீறலில் உள்ளன என்பதைக் குறிப்பிடுகிறது. இந்த ஒரே அட்டவணைதான் ஆளுகைத் திட்டத்தின் பாதியை அமைதியாகத் தடுத்து வைத்திருக்கும் இடையூறு பொறியாளரை (bottleneck engineer) வெளிக்கொணர்கிறது.

செயல்பாட்டு ஒழுக்கம்

  • ComplianceReport.snapshot_hash-ஐ சுமை தாங்கும் (load-bearing) ஒன்றாகக் கருதுங்கள். சரிபார்க்கக்கூடிய ஹாஷ் இல்லாமல் காப்பக bucket-இல் வந்து சேரும் எந்தவொரு கலைப்பொருளும் சிதைந்ததாகும்; மாதாந்திர மின்னஞ்சல் ஹாஷை அச்சிட வேண்டும், இதனால் எந்தவொரு வாசகரும் காப்பகத்திலிருந்து எடுக்கும் JSON தலைமை பார்த்ததோடு பொருந்துகிறதா என்பதைச் சரிபார்க்க முடியும்.
  • தணிக்கையாளர் மேற்பரப்பை ஒருபோதும் நேரடி ஏற்றுமதியாளர் endpoint-இலிருந்து வழங்கக் கூடாது. ஒரு ஒழுங்குமுறையாளர் கடந்த மார்ச் மாதத்தின் இணக்க நிலையைக் கேட்டால், காப்பகப்படுத்தப்பட்ட ஹாஷ் செய்யப்பட்ட JSON-ஐச் சுட்டிக்காட்டுங்கள், Grafana நேர-வரம்பு வினவலை அல்ல — ஒரு downsampling எல்லையைக் கடந்தவுடன் Grafana தக்கவைப்பு சாளரங்கள் வரலாற்று நம்பகத்தன்மை குறித்துப் பொய் சொல்கின்றன.
  • மூன்று முக்கிய இணக்கச் சோதனைகளை (C-001, C-002, C-003) வெளியீடுகள் முழுவதும் மாற்றமில்லாமல் வைத்திருங்கள். புதிய சோதனைகளை (C-004 முதல்) சுதந்திரமாகச் சேர்க்கலாம், ஆனால் ஏற்கனவே உள்ள ஒரு சோதனையை மறுபெயரிடுவது அல்லது மறுஎண்ணிடுவது ஒவ்வொரு வரலாற்று அறிக்கை ஒப்பீட்டையும், check_id மூலம் வடிகட்டும் ஒவ்வொரு தணிக்கை-பாதை வினவலையும் உடைக்கிறது.
  • தலைமைக்கான மின்னஞ்சல் மாதாந்திரமாக இருந்தாலும், முழு தணிக்கையை ஒவ்வொரு இரவும் இயக்குங்கள். இரவு இடைவெளி பின்னடைவுகளை இருபத்தி நான்கு மணி நேரத்திற்குள் பிடிக்கிறது; மாதாந்திர இடைவெளி என்பது அறிக்கையிடல் தாளம் மட்டுமே. இந்த இரண்டு இடைவெளிகளும் சுயாதீனமானவை, சுயாதீனமாகவே இருக்க வேண்டும்.
  • adr_review_sla_breach_total > 0 மீது எச்சரிக்கைக்கு-ஒரு-வாரம், பேஜிங்கிற்கு-இருபத்தி-நான்கு-மணிநேரம் என்ற தீவிர ஏணியுடன் (severity ladder) எச்சரிக்கை அமைக்கவும். ஒரே ஒரு SLA மீறலுக்காக on-call-ஐ பேஜ் செய்வது இரைச்சல்; மீறல்கள் ஒரு குழுவின் மதிப்பாய்வுத் திறனைத் தாண்டிக் குவியும்போது பேஜ் செய்வது சமிக்ஞை.
  • ஏற்றுமதியாளர் ஸ்கிரேப் பாதையை 500 ms-இல் timeout ஆகும்படி இணைக்கவும். திரட்டி (aggregator) என்பது நினைவகத்தில் உள்ள பதிவகத்தின் மீதான ஒரு தூய செயல்பாடு, எனவே அதைவிட மெதுவான எதுவும் பதிவகம் நினைவகத்தில் பொருந்துவதைத் தாண்டி வளர்ந்துவிட்டதையும், பக்கமிடப்பட்ட (paginated) கேச் அடுக்கு தேவைப்படுவதையும் குறிக்கிறது — மெதுவான ஸ்கிரேப் நேரத் தொடரிலிருந்து மெட்ரிக்குகளை அமைதியாக விட்டுவிட அனுமதிக்காதீர்கள்.
  • தணிக்கைக் காப்பக bucket-ஐ object-lock இயக்கப்பட்டதாகவும், குறைந்தபட்சம் ஏழு ஆண்டுகள் தக்கவைப்புக் கொள்கையுடனும் சேமிக்கவும். இணக்க அறிக்கை ஒரு ஆதாரம்; ஆதாரம் அதை உருவாக்கிய பொறியாளர்களைவிட நீண்ட காலம் நீடிக்க வேண்டும், மேலும் bucket கொள்கையே அந்த வாக்குறுதியை வெறும் ஆசையாக இல்லாமல் அமல்படுத்தக்கூடியதாக ஆக்குகிறது.
Loading diagram...

கோட் விளக்கம்

செயல்பாட்டு/தணிக்கை எல்லையை இப்போதுதான் வரைந்த நிலையில், இரு மேற்பரப்புகளுக்கும் உணவளிக்கும் ஒரே மதிப்பீட்டியை நீங்கள் இப்போது செயல்படுத்துகிறீர்கள். ComplianceAuditor இயந்திரத்தால் சரிபார்க்கக்கூடிய கேள்விகளுக்குப் பதிலளிக்கிறது — இங்கே, காலாண்டு மதிப்பாய்வு SLA-க்கள் மதிக்கப்படுகின்றனவா? — மேலும் CI கலைப்பொருட்களுக்காக JSON ஆகவும், தலைமைக்கான மின்னஞ்சலுக்காக markdown ஆகவும் நிர்ணயமாக (deterministically) வரிசைப்படுத்தப்படும் ஒரு ComplianceReport-ஐ வெளியிடுகிறது. இரண்டு வடிவமைப்புப் புள்ளிகள் சுமை தாங்கும் தன்மையுடையவை: பல-அச்சு fleet_counts (நிலை, வகை, மதிப்பாய்வாளர், SLA மீறல்கள்) மற்றும் காப்பகப்படுத்தப்பட்ட கலைப்பொருள் சிதைக்கப்படவில்லை என்பதை நிரூபிக்கும் snapshot_hash.

Code snippetpython
1from dataclasses import dataclass, field, asdict 2from datetime import datetime, timedelta 3from hashlib import sha256 4import json 5 6@dataclass 7class ComplianceFinding: 8 check_id: str 9 description: str 10 passed: bool 11 failing_items: list[str] = field(default_factory=list) 12 severity: str = "info" 13 14@dataclass 15class ComplianceReport: 16 generated_at: datetime 17 findings: list[ComplianceFinding] 18 fleet_counts: dict[str, dict[str, int]] 19 snapshot_hash: str = "" 20 21 def to_json(self) -> str: 22 body = asdict(self) 23 body["generated_at"] = self.generated_at.isoformat() 24 return json.dumps(body, sort_keys=True, indent=2) 25 26class ComplianceAuditor: 27 def __init__(self, sla_days: int = 90): 28 self.sla_days = sla_days 29 30 def audit(self, adrs: list[dict]) -> ComplianceReport: 31 now = datetime.utcnow() 32 breached = { 33 a["reviewer"] for a in adrs 34 if (now - datetime.fromisoformat(a["last_reviewed_at"])) 35 > timedelta(days=self.sla_days) 36 } 37 by_reviewer: dict[str, int] = {} 38 for a in adrs: 39 by_reviewer[a["reviewer"]] = by_reviewer.get(a["reviewer"], 0) + 1 40 findings = [ 41 ComplianceFinding( 42 "C-002", 43 f"Every accepted ADR reviewed within {self.sla_days} days", 44 not breached, sorted(breached), "high", 45 ), 46 ] 47 report = ComplianceReport( 48 generated_at=now, 49 findings=findings, 50 fleet_counts={"reviewer": by_reviewer}, 51 ) 52 report.snapshot_hash = sha256(report.to_json().encode()).hexdigest() 53 return report

மாதாந்திர தலைமைக்கான மின்னஞ்சல் அச்சிடும் உரிமையாளர்-வாரியான தொகுப்பு அட்டவணை என்பது சரியாக fleet_counts["reviewer"] இறங்கு வரிசையில் வரிசைப்படுத்தப்பட்டது, ஒவ்வொரு வரிசையும் அந்த மதிப்பாய்வாளரின் ADR-களில் எத்தனை breached தொகுப்பில் உள்ளன என்பதைக் குறிப்பிடுகிறது — இதுவே ஆளுகைத் திட்டத்தின் பாதியை அமைதியாகத் தடுத்து வைத்திருக்கும் இடையூறு பொறியாளரை வெளிக்கொணர்கிறது. snapshot_hash நியமன, வரிசைப்படுத்தப்பட்ட-விசை JSON-இன் மீது கணக்கிடப்படுவதால், மின்னஞ்சல் அந்த டைஜெஸ்டை அச்சிட முடியும், இதனால் எந்தவொரு வாசகரும் காப்பக bucket-இலிருந்து எடுக்கப்பட்ட JSON தலைமை பார்த்த சரியான அறிக்கையோடு பொருந்துகிறதா என்பதைச் சரிபார்க்க முடியும். ஹாஷ் generated_at உட்பட முழு உடலையும் உள்ளடக்குகிறது என்பதைக் கவனியுங்கள், எனவே இது ஒரே அறிக்கைக்கான சிதைவு-ஆதார முத்திரை (tamper-evidence seal), இயக்கங்களுக்கு-இடையேயான idempotency உத்தரவாதம் அல்ல: மாறாத பதிவகத்தின் மீதான இரண்டு audit அழைப்புகளும் அவற்றின் generated_at நேரமுத்திரையில் வேறுபடுகின்றன, எனவே வெவ்வேறு டைஜெஸ்ட்களை உருவாக்குகின்றன. இரண்டு இயக்கங்களை உள்ளடக்க விலகலுக்காக (content drift) ஒப்பிட, மூல snapshot_hash மதிப்புகளை ஒப்பிடுவதற்குப் பதிலாக, ஹாஷ் செய்யப்பட்ட உடலிலிருந்து generated_at-ஐ விலக்குங்கள் (அல்லது findings மற்றும் fleet_counts-ஐ நேரடியாக diff செய்யுங்கள்).

துறைசார் பயன்பாடு

செய்ய வேண்டியவை மற்றும் செய்யக் கூடாதவை

செய்ய வேண்டியவை

  1. Prometheus ஸ்கிரேப் பாதையையும் ஹாஷ் செய்யப்பட்ட JSON கலைப்பொருளையும் தனித்தனி கோட் பாதைகளில் வைத்திருங்கள் — ComplianceReport.to_json() முறை காப்பகப்படுத்தப்பட்டு தணிக்கையாளர்களால் மேற்கோள் காட்டப்படும் நியமன ஸ்னாப்ஷாட்டை உருவாக்குகிறது; நேரடி ஆபரேட்டர் மேற்பரப்பு அதே கோட் பாதையைப் பகிர்ந்தால், "மாற்ற முடியாத" கலைப்பொருள் இனி மாற்ற முடியாததாக இருக்காது, மேலும் இரண்டு வாசகர்கள் ஒரு வாரம் இடைவெளியில் ஹாஷ்களை ஒப்பிடும் முதல் தருணத்திலேயே SOC 2 ஆதாரச் சேகரிப்பு சரிந்துவிடும்.
  2. snapshot_hash-ஐ வரிசைப்படுத்தப்பட்ட-விசை JSON உடலின் மீது sha256 மூலம் கணக்கிடுங்கள் — to_json()-க்குள் json.dumps-க்கு sort_keys=True அனுப்புவது கொடுக்கப்பட்ட உடலுக்கான வரிசைப்படுத்தலை நிர்ணயமாக ஆக்குகிறது, எனவே டைஜெஸ்ட் ஒரு நம்பகமான சிதைவு-ஆதார முத்திரையாகும்: காப்பகப்படுத்தப்பட்ட JSON-இன் மீது ஹாஷை மீண்டும் கணக்கிடும் எந்தவொரு வாசகரும் மின்னஞ்சல் அச்சிட்ட அதே மதிப்பைப் பெறுவார். உடலில் generated_at உள்ளதால், டைஜெஸ்ட் ஒவ்வொரு இயக்கத்திலும் வடிவமைப்பின்படி மாறுகிறது; இரண்டு இயக்கங்களுக்கு இடையே உள்ளடக்க விலகலைக் கண்டறிய, மூல டைஜெஸ்ட்களை ஒப்பிடுவதற்குப் பதிலாக generated_at விலக்கப்பட்ட உடலை ஹாஷ் செய்யுங்கள்.
  3. fleet_counts-ஐ மதிப்பாய்வாளர்-விசை தொகுப்புடன் நிரப்பி, ஒவ்வொரு வரிசையையும் அதன் SLA-மீறல் எண்ணிக்கையுடன் குறிப்பிடுங்கள் — ComplianceAuditor.audit loop-இலிருந்து வரும் breached தொகுப்புதான், மதிப்பாய்வுப் பின்னடைவு ஆளுகைத் திட்டத்தின் பாதியை அமைதியாகத் தடுக்கும் ஒரே பொறியாளரை வெளிக்கொணர்கிறது; நிலை-மட்டும் எண்ணிக்கை அந்த இடையூறை முழுவதுமாக மறைக்கிறது.

செய்யக் கூடாதவை

  1. ஆபரேட்டர் டாஷ்போர்டுக்கும் தணிக்கையாளர் கலைப்பொருளுக்கும் இடையே ஒரே நேரடி நிலை object-ஐப் பகிர வேண்டாம் — உறுதியான தோல்வி முறை என்னவென்றால், இரண்டு வாசகர்கள் ஒரு வாரம் இடைவெளியில் அறிக்கையை எடுக்கின்றனர், நேரடி பதிவகம் மாறியதால் வெவ்வேறு fleet_counts எண்களைப் பார்க்கின்றனர், மேலும் தணிக்கை நேரத்தில் எது உண்மை என்பதில் இனி உடன்பட முடியாது, இது இணக்கப் பதிவின் நம்பகத்தன்மையை அழிக்கிறது.
  2. ஹாஷ் செய்வதற்கு முன் ComplianceReport-ஐ வரிசைப்படுத்தும்போது sort_keys=True-ஐ விட்டுவிட வேண்டாம் — Python-இன் இயல்புநிலை dict வரிசை செருகல்-வரிசை (insertion-order) ஆகும், எனவே sort_keys=True இல்லாமல் அதே தர்க்கரீதியான உடல் Python பதிப்புகள் அல்லது dict-மறுகட்டமைப்புப் பாதைகள் முழுவதும் வேறுபட்ட JSON சரமாக வரிசைப்படுத்தப்படலாம், மேலும் காப்பகப்படுத்தப்பட்ட JSON-இன் மீது டைஜெஸ்டை மீண்டும் கணக்கிடும் ஒரு வாசகர் பொருத்த முடியாமல் போவார் — சிதைவு-ஆதார உத்தரவாதத்தை அமைதியாக உடைத்துவிடும். (இரண்டு இயக்கங்கள் ஏற்கனவே generated_at மூலம் வேறுபடுகின்றன; sort_keys என்பது நிலையான உடலுக்கான மறுஉருவாக்கத் தன்மை பற்றியது, இயக்கங்களுக்கு-இடையேயான சமத்துவம் பற்றியது அல்ல.)
  3. அறிக்கை உடல் முழுமையாக நிரப்பப்படுவதற்கு முன் snapshot_hash-ஐக் கணக்கிட வேண்டாம் — ComplianceAuditor.audit-இல் உள்ள கோட் முதலில் ComplianceReport-ஐ உருவாக்கி, பின்னர் report.snapshot_hash = sha256(report.to_json().encode()).hexdigest() அமைக்கிறது; fleet_counts அல்லது findings இணைக்கப்படுவதற்கு முன் ஹாஷ் செய்வது காப்பக bucket சேமிக்கும் முழுமையான கலைப்பொருளோடு பொருந்தாத ஒரு டைஜெஸ்டை உருவாக்குகிறது, மேலும் ஒவ்வொரு pull-இலும் CI சரிபார்ப்பு தோல்வியடைகிறது.

3 hands-on labs come with this lesson — real code, in a cloud IDE. Create a free account to run them. No card.

Free account · no card · straight to the labs

Or get the full path — from

Listen to this lesson

Audio overviews of this lesson's labs and its chapter, from GenBodha Bytes.

More free lessons in GenAI Architecture & Design Patterns

All free lessons in GenAI Solutions & Delivery →