Files
ezra-environment/tools/__pycache__/rca_generator.cpython-312.pyc

94 lines
8.2 KiB
Plaintext
Raw Normal View History

<EFBFBD>
6<EFBFBD>i<EFBFBD><00> <00><><00>dZddlZddlmZddlmZddlmZGd<06>d<07>Zedk(rJe<07>Z e jd d
d d d dd<0F>ddd<0F>ddd<0F>ggd<14>dddd<18>gd<19><1A>\Z Z e de <0C><00><02>e e <0B>yy)z<>
RCA (Root Cause Analysis) template generator for Ezra.
Creates structured RCA documents from incident parameters.
Epic: EZRA-SELF-001 / Phase 4 - Self-Monitoring & RCA
Author: Ezra (self-improvement)
<EFBFBD>N)<01>datetime)<01>Path)<01>Optionalc!<00><><00>eZdZdZddddd<06>ZdZdd efd
<EFBFBD>Zd efd <0C>Z dd ededededededede
e de
ede
e de
ede
ededed e ee ffd<1B>Zd e
e fd<1C>Zy)<1F> RCAGeneratorz"Generate structured RCA documents.z'Critical - Service down, data loss riskz.High - Major feature broken, workaround existsz'Medium - Feature degraded, minor impactz#Low - Cosmetic, minor inconvenience)<04>P0<50>P1<50>P2<50>P3a<33># RCA-{number}: {title}
## Summary
| Field | Value |
|-------|-------|
| **Date** | {date} |
| **Severity** | {severity} - {severity_desc} |
| **Duration** | {duration} |
| **Affected** | {affected} |
| **Status** | {status} |
## Timeline
{timeline}
## Root Cause
{root_cause}
## Impact
{impact}
## Resolution
{resolution}
## 5-Whys Analysis
{five_whys}
## Action Items
{action_items}
## Lessons Learned
{lessons}
## Prevention
{prevention}
---
Generated by: Ezra RCA Generator
Date: {generated}
N<EFBFBD>rca_dirc<00>f<00>t|xsd<01>|_|jjdd<02><03>y)Nz/root/wizards/ezra/reports/rcaT)<02>parents<74>exist_ok)rr <00>mkdir)<02>selfr s <20>2/root/wizards/ezra/tests/../tools/rca_generator.py<70>__init__zRCAGenerator.__init__Bs+<00><00><1B>G<EFBFBD>G<>'G<>H<><04> <0C> <0C> <0C> <0C><1A><1A>4<EFBFBD>$<24><1A>7<><00>returnc<00><00>t|jjd<01><00>}|syg}|D];} t|jj d<03>d<00>}|j |<04><00>=t|d<04><05>dzS#ttf$rY<00>_wxYw)zGet next RCA number.<2E>RCA-*.md<6D><00>-r)<01>default)
<EFBFBD>listr <00>glob<6F>int<6E>stem<65>split<69>append<6E>
IndexError<EFBFBD>
ValueError<EFBFBD>max)r<00>existing<6E>numbers<72>f<>nums r<00> _next_numberzRCAGenerator._next_numberFs<><00><00><17><04> <0C> <0C>)<29>)<29>*<2A>5<>6<><08><17><14><14><07><19> <15>A<EFBFBD> <15><19>!<21>&<26>&<26>,<2C>,<2C>s<EFBFBD>+<2B>A<EFBFBD>.<2E>/<2F><03><17><0E><0E>s<EFBFBD>#<23> <15> <13>7<EFBFBD>A<EFBFBD>&<26><11>*<2A>*<2A><><1F>
<EFBFBD>+<2B> <15><14> <15>s<00>8A:<02>:B <05> B <05>title<6C>severity<74>duration<6F>affected<65>
root_cause<EFBFBD>impact<63>
resolution<EFBFBD>timeline<6E> five_whys<79> action_items<6D>lessons<6E>
prevention<EFBFBD>status<75>numberc<00>.<00>|<0E>|j<00>}|rdjd<03>|D<00><00>}nd}| r"djd<05>t| <09>D<00><00>}nd}|
rdjd<07>|
D<00><00>}nd}djd <09>| xsd
gD<00><00>}djd <0B>| xsd
gD<00><00>}|jj ||t j <00>jd <0C>||jj|d <0A>||| ||||||||t j <00>j<00><00><0E>}ddl }|jdd|j<00>jdd<13><00>dd}|jd|<0E>d|<16>d<16>z }|j!|<14>||fS)z7Generate an RCA document. Returns (content, file_path).N<>
c3<00>lK<00>|],}d|jdd<02><00>d|jdd<05><00><00><04><01><00>.y<06>w)z- **<2A>timez??:??z** - <20>eventz Unknown eventN<74><01>get)<02>.0<EFBFBD>ts r<00> <genexpr>z(RCAGenerator.generate.<locals>.<genexpr>ls=<00><00><><00>%<0E><15><17>q<EFBFBD>u<EFBFBD>u<EFBFBD>V<EFBFBD>W<EFBFBD>-<2D>.<2E>e<EFBFBD>A<EFBFBD>E<EFBFBD>E<EFBFBD>'<27>?<3F>4S<34>3T<33>U<>%<0E>s<00>24z- TBD - Add timeline entriesc3<00>6K<00>|]\}}|dz<00>d|<02><00><03><01><00>y<02>w)rz . **Why?** N<>)r><00>i<>whys rr@z(RCAGenerator.generate.<locals>.<genexpr>us(<00><00><><00>&<0E>-3<>Q<EFBFBD><03>1<EFBFBD>Q<EFBFBD>3<EFBFBD>%<25>{<7B>3<EFBFBD>%<25>(<28>&<0E>s<00>z/1. **Why?** TBD
2. **Why?** TBD
3. **Why?** TBDc
3<00><>K<00>|]@}d|jdd<02><00>d|jdd<05><00>d|jdd<08><00>d <09><07><01><00>By
<EFBFBD>w) z - [ ] **[<5B>priorityr
z]** <20>action<6F>TBDz (Owner: <20>owner<65>Ezra<72>)Nr<)r><00>as rr@z(RCAGenerator.generate.<locals>.<genexpr>}sZ<00><00><><00>)<0E><16><1C>A<EFBFBD>E<EFBFBD>E<EFBFBD>*<2A>d<EFBFBD>3<>4<>D<EFBFBD><11><15><15>x<EFBFBD><15>9O<39>8P<38>Q<1B><1C>5<EFBFBD>5<EFBFBD><17>&<26>1<>2<>!<21>5<>)<0E>s<00>AAz-- [ ] **[P2]** Add action items (Owner: Ezra)c3<00>&K<00>|] }d|<01><00><02><01><00> y<01>w<01>z- NrB)r><00>ls rr@z(RCAGenerator.generate.<locals>.<genexpr><3E>s<00><00><><00>G<>Q<EFBFBD>"<22>Q<EFBFBD>C<EFBFBD><08>G<><47><00>rHc3<00>&K<00>|] }d|<01><00><02><01><00> y<01>wrNrB)r><00>ps rr@z(RCAGenerator.generate.<locals>.<genexpr><3E>s<00><00><><00>"M<><01>R<EFBFBD><01>s<EFBFBD>8<EFBFBD>"M<>rPz%Y-%m-%d<>Unknown)r6r)<00>dater*<00> severity_descr+r,r5r-r.r/r0r1r2r3r4<00> generatedrz
[^a-z0-9-]<5D><00> r<00>(zRCA-z.md)r(<00>join<69> enumerate<74>TEMPLATE<54>formatr<00>now<6F>strftime<6D>SEVERITY_LEVELSr=<00> isoformat<61>re<72>sub<75>lower<65>replacer <00>
write_text)rr)r*r+r,r-r.r/r0r1r2r3r4r5r6<00> timeline_str<74> five_whys_str<74>action_items_str<74> lessons_str<74>prevention_str<74>content<6E>_re<72>
safe_title<EFBFBD> file_paths r<00>generatezRCAGenerator.generateTs<><00><00>& <12>><3E><19>&<26>&<26>(<28>F<EFBFBD> <14><1F>9<EFBFBD>9<EFBFBD>%<0E>!<21>%<0E><0E>L<EFBFBD>
:<3A>L<EFBFBD> <15> <20>I<EFBFBD>I<EFBFBD>&<0E>7@<40><19>7K<37>&<0E><0E>M<EFBFBD>P<01>M<EFBFBD> <18>#<23>y<EFBFBD>y<EFBFBD>)<0E>&<26>)<0E> <0E> <1C> O<01> <1C><1B>i<EFBFBD>i<EFBFBD>G<>7<EFBFBD>3E<33>u<EFBFBD>g<EFBFBD>G<>G<> <0B><1D><19><19>"M<>j<EFBFBD>6K<36>U<EFBFBD>G<EFBFBD>"M<>M<><0E><16>-<2D>-<2D>&<26>&<26><19><17><19><1C><1C><1E>(<28>(<28><1A>4<><1D><1E>.<2E>.<2E>2<>2<>8<EFBFBD>Y<EFBFBD>G<><1D><1D><19>!<21><19>!<21>!<21>#<23>)<29><1F>%<25><1E>l<EFBFBD>l<EFBFBD>n<EFBFBD>.<2E>.<2E>0<>#'<27>
<EFBFBD><07>( <19><18>W<EFBFBD>W<EFBFBD>]<5D>B<EFBFBD><05> <0B> <0B> <0A>0E<30>0E<30>c<EFBFBD>3<EFBFBD>0O<30>P<>QT<51>RT<52>U<>
<EFBFBD><18>L<EFBFBD>L<EFBFBD>T<EFBFBD>&<26><18><11>:<3A>,<2C>c<EFBFBD>#B<>B<> <09><11><1C><1C>W<EFBFBD>%<25><16> <09>!<21>!rc
<00><><00>g}t|jjd<01><00>D]<5D>}|j<00>jdkDr!|j <00>j <00>dnd}|j|j|jdd<03>|j<00>jtj|j<00>j<00>j<00>d<05><04><00><>|S)zList existing RCAs.rrrWz# )<04>filer)<00>size<7A>modified)<0E>sortedr r<00>stat<61>st_size<7A> read_text<78>
splitlinesr <00>namerer<00> fromtimestamp<6D>st_mtimera)r<00>rcasr&<00>
first_lines r<00> list_rcaszRCAGenerator.list_rcas<61>s<><00><00><11><04><17><04> <0C> <0C>)<29>)<29>*<2A>5<>6<> <0F>A<EFBFBD>:;<3B>&<26>&<26>(<28>:J<>:J<>Q<EFBFBD>:N<><11><1B><1B><1D>1<>1<>3<>A<EFBFBD>6<>TV<54>J<EFBFBD> <10>K<EFBFBD>K<EFBFBD><19><06><06>#<23>+<2B>+<2B>D<EFBFBD>"<22>5<><19><06><06><08>(<28>(<28>$<24>2<>2<>1<EFBFBD>6<EFBFBD>6<EFBFBD>8<EFBFBD>3D<33>3D<33>E<>O<>O<>Q<> <0E> <0F> <0F><14> r)N) r
rSzEzra wizard housezUnder investigationrHrHNNNNN<4E>OpenN)<10>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r`r\<00>strrrr(r<00>dict<63>tuplerrprrBrrrrs:<00><00>,<2C>8<>><3E>7<>3<> <06>O<EFBFBD>&<04>H<EFBFBD>P8<><03>8<> +<2B>c<EFBFBD> +<2B>"<1D>!<21>+<2B>/<2F><1B><1F>#<23>#<23>#'<27>!<21> $<24><1C><1A>N"<22><12>N"<22><16>N"<22><16> N"<22>
<16> N"<22> <18> N"<22><14>N"<22><18>N"<22><17>t<EFBFBD>*<2A>N"<22><18><03>9<EFBFBD>N"<22><1B>4<EFBFBD>j<EFBFBD>N"<22><16>c<EFBFBD><19>N"<22><19><13>I<EFBFBD>N"<22><14>N"<22><14>N"<22>
<0F>s<EFBFBD>D<EFBFBD>y<EFBFBD> <19>!N"<22>` <14>4<EFBFBD><04>:<3A> rr<00>__main__z Example RCAr
z
30 minuteszExample root cause for testingz10:00zIssue detected)r:r;z10:15zInvestigation startedz10:30zRoot cause identified and fixed)zThe API returned 401zToken was expiredz#No token refresh automation existedr zImplement token auto-refreshrJ)rFrGrI<00>Resolved)r)r*r+r-r0r1r2r5z Generated: )r<><00>jsonr<00>pathlibr<00>typingrrr<><00>genrprl<00>path<74>printrBrr<00><module>r<>s<><00><01><04> <0C><1D><18><1B>_<14>_<14>D <0C>z<EFBFBD><19>
<16>.<2E>C<EFBFBD><17>L<EFBFBD>L<EFBFBD><1B><15><1D>3<><1C>'7<> 8<><1C>'><3E> ?<3F><1C>'H<> I<>
<EFBFBD>

<EFBFBD> <1E>)G<>RX<52> Y<>
<EFBFBD><1A>%!<21><06>M<EFBFBD>G<EFBFBD>T<EFBFBD>(
<EFBFBD>K<EFBFBD><04>v<EFBFBD>
<1E><1F> <09>'<27>N<EFBFBD>/r