
    iiF                     ~   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZmZmZmZmZ  ed	d
d          Ze                    edgddgdg           e                    de	          defd            Ze                    de          defd            ZdedefdZdedefdZdedede fdZ!dede
fdZ"dede#e         fdZ$dede#e         fdZ%e&                    d           d!             Z'e(d"k    r/dd#l)Z) e*d$            e*d%            e)j+        ed&d'(           d#S d#S ))zt
FastAPI REST API for migration assessment.
Simple endpoint that accepts JSON input and returns assessment results.
    )FastAPIHTTPException)CORSMiddleware)AssessmentInputs)AssessmentResultTimeline)determine_engagement_modelexplain_engagement_decision)calculate_complexity_score)generate_validation_warningsgenerate_migration_scenariogenerate_phase_detailsgenerate_ps_role_breakdowngenerate_immediate_actionsMigration Assessment APIz!MKE/MSR Migration Assessment Tool1.0.0)titledescriptionversion*T)allow_originsallow_credentialsallow_methodsallow_headers/api/assess)response_modelinputsc                    	 t          |           \  }}t          |           }t          |          }t          |           }t	          | |          }t          |           }t          | |          }t          |           }	t          |           }
|j	        |j
        z   dz  dz  }t          | |j        |          }t          | |j                  }|j	        |j
        z   dz  }t          |j        |j        |          }t!          ||||||||| j        dk    rdn| j        dk    rdnd| j        dk    rg dng d|	|
|||	          S # t&          $ r#}t)          d
t+          |                    d}~ww xY w)z
    Perform complete migration assessment.

    Returns complexity score, readiness score, engagement model,
    timeline estimate, and recommendations.
       RQ@r   zMKE Platform UpgradezRegistry-First MigrationzPlatform-First Migration)   Upgrade MKE 3.x → MKE 4.0Update applicationszFinal validation)u   Migrate MSR 2.9 → MSR 4.0r"   r!   )complexity_scorecomplexity_levelreadiness_scorereadiness_levelengagement_modeltimelineconsiderationspriority_actionsmigration_pathmigration_strategyvalidation_warningsmigration_scenariophase_detailsimmediate_actionsps_role_breakdown  status_codedetailN)r   _calculate_readiness_get_readiness_levelr	   _calculate_timeline_identify_considerations_generate_actionsr   r   
min_months
max_monthsr   modelr   r   ps_effort_percentr   num_msr_instancesswarm_percent	Exceptionr   str)r   r#   r$   r%   r&   
engagementr(   r)   actionsr-   r.   total_weeksr/   r0   avg_timeline_monthsr1   es                    /app/api.pyassess_migrationrI   #   s   2<-G-O-O** /v66.?? 077
 'vz:: 2&99#FJ77 ;6BB8@@*X-@@AEL.vz7GUU6vz?OPP'2X5HHAM6z7GIegz{{--++')$5;5MQR5R5R11w}  xL  PQ  xQ  xQYsYs  Wq +q00 [ZZZeee 31'//'
 
 
 	
*  < < <CFF;;;;<s   EE 
E1E,,E1
/api/debugc                     	 t          |           }t          |           }|                                 ||                                dS # t          $ r#}t	          dt          |                    d}~ww xY w)z
    Debug endpoint that shows detailed breakdown of engagement model decision.
    Useful for understanding why a particular model was chosen.
    )r   explanationfinal_engagement_modelr2   r3   N)r
   r	   dictrA   r   rB   )r   rL   rC   rG   s       rH   debug_engagement_modelrO   `   s    
<1&99/77
 kkmm&&0oo&7&7
 
 	

  < < <CFF;;;;<s   AA
 

A7A22A7returnc                 :   d}| j         dk    r|dz  }n| j         dk    r|dz  }| j        dk    r|dz  }n| j        dk    r|d	z  }| j        d
k    r|d	z  }n| j        dk    r|dz  }| j        dv r| j        dk    r|dz  }t	          dt          d|                    S )z Simplified readiness calculation2            
   	extensive   some   F   )zmultiple-dailydaily<      r   d   )k8s_experiencemigration_expautomation_leveldeploy_frequencymaxmin)r   scores     rH   r6   r6   s   s    E !!		!	#	# {**			'	' "$$		 B	&	& "===&BY]_B_B_
q#c5//"""    rf   c                 &    | dk     rdS | dk     rdS dS )zADetermine readiness level from score (matches JavaScript version)   zLow Readinessr]   zMedium ReadinesszGood Readiness )rf   s    rH   r7   r7      s%    rzz	!!rg   r@   	app_countc                     | dk    rdS t          || dz  z            }|dk    rdS d}d}d}|||z  |z  z   }|dz  }t          d|          S )	a2  
    Calculate Swarm conversion time with economy of scale.

    Uses power-law scaling (exponent 0.7) to model artifact reuse:
    - First apps: Full effort (create patterns, Helm templates, K8s manifests)
    - Later apps: Reduced effort (reuse patterns, customize configs)

    Per-app effort assumptions:
    - Simple service (stateless): ~0.5 day
    - Medium service (volumes, secrets): ~1 day
    - Complex service (stateful, networking): ~2 days
    - Average: ~1 day per app baseline, reduced by reuse

    Returns total weeks for Swarm conversion.
    r           r_   rU   g?ffffff?r^         ?)intrd   )r@   rk   
swarm_apps	base_daysscaling_factoreconomy_exponentdaysweekss           rH   _swarm_conversion_weeksrw      s}      s Y-#"5677JQs IN
&66.HHD 1HE sE??rg   c                 j   | j         dk    o6| j        dk    o+| j        dk    o | j        dk    o| j        dk    o
|j        dk    }| j        dk    }| j        }| j        }|r	|rdnd}d}n4| j         dk    r	|rdnd}d}n |rdnd}t          | j         | j                  }dd	d
d
d}|	                    |j        d
          }	||	z  }t          d|dz
            dz  }
|rt          d|dz
            d
z  nd}|}ddddd}|	                    |j        d          }|s|dk    r|dz  }t          d| j        dz
            dz  }dddddd}|	                    | j        d          }| j        dk    rd}n[| j        dk    rd}nM| j        dk    rd
}n?| j        dk    rd}n1| j        dk    rd}n#d| j        dz
  dz  dz  z   }t          |d          }||	z  }||
z   |z   |z   |z   |z   |z   |z   }| j         dk    rt          | j        | j         dz  z            nd}|t          |
d          t          |d          t          |d          |t          |d          | j        |||||d}d}| j        dk    r| j         dk    r|dz  }| j        dk     r|dz  }| j        dk    r|dz  }n| j        dk    r|dz  }t          dt          d |                    }|d|z   z  }|r|rdnd}nd}t          ||          }|d!z  }t!          t          |d"z  d          t          |d#z  d          t          |d          |$          S )%u]  
    Aggressive but safe timeline calculation:
    - Reduced base weeks (assumes experienced PS team with parallel workstreams)
    - Additive model instead of multiplicative (more predictable, less scary)
    - Reduced buffer (PS team manages contingencies)
    - Tighter range (±10% instead of ±15%)
    - Fast-track for minimal engagements
    r   r   ri   rS      advisoryrm   rn   g333333?ro   )fullhybridrz   assessment-firstg      ?)rz   r|   r{   r}   )r^   rS   rU   r   ry   rR   r_      i,  g      ?r2   g      @g      @g      @)basemke_instancesmsr_instancesswarmrq   app_validation
total_appsrC   environments
experienceminimal_engagementmsr_migrationg?gQ?(   g{Gz?K   gp=
ף?r    g?g?)r;   r<   
base_weeksmultipliers_applied)r@   num_mke_instancestotal_nodesr`   num_environmentsr=   r?   rw   rk   getrd   re   rp   roundrb   mission_critical_percentr   )r   rC   
is_minimalneeds_msr_migrationnum_msrnum_mker   swarm_weekspace_multiplierspace_multipliermke_adjustmentmsr_adjustmentswarm_adjustmentengagement_adjustmentsengagement_adjustmentenv_adjustmentexperience_discountsexperience_adjustmentapp_adjustmentrE   swarm_apps_countadjustmentsbuffer	min_weeksmonthss                            rH   r8   r8      s    	! 	' A%	'b 	' 	"	' 	1$		'
 	J&  !2Q6&G&G  V-4QQ1
			"	"-4QQ1
 .4QQ1
-f.BFDTUU
 	  '**:+;SAAO?"K Wq[**S0N 5HNSWq[**S00QN #
 	  366z7GKK ##81#<#<" V4q8::Q>N   144V5JANN 2		S	 	 		S	 	 		S	 	 		S	 	  !1C!73 >#EE^S11 o%N .?#$&;<>LM()+9:K
 PVOcfgOgOgs6+v/Cc/IJKKKmn~q11~q11'++&22&+&+(, K  F !!f&:R&?&?$##$ &++$		(2	-	-$ s4(())FAJK  ,3AA!			k9--K4F $**$**Q'''	   rg   c                    g }| j         dk    r)| j        dk    r|                    d| j          d           | j         dk    r)| j        dk     r|                    d| j          d           | j         d	k    r2| j        dk    r'|                    d
| j          d| j        dd           | j        dk     r | j         dk    r|                    d           | j        dk     r|                    d           |r|ndgS )z
    Identify key considerations for the migration.

    Note: High Swarm % is a timeline/complexity factor, not inherently risky.
    It only becomes a consideration when combined with capability gaps or capacity issues.
    r]   r   zHigh Swarm workload (z?%) with limited K8s expertise - additional training recommendedrR   r   zManual conversion of zF% Swarm workloads - automation improvements would accelerate migrationr[   zTeam capacity for z% Swarm conversion at scale (z.0fz+ apps/person) - phased approach recommendedrU   ri   zKKubernetes expertise development recommended to optimize migration velocityzCAutomation improvements would reduce manual effort during migrationz(No significant considerations identified)r@   r`   appendrb   apps_per_team)r   r)   s     rH   r9   r9   v  s    N b  V%:a%?%?  Lf6J  L  L  L  	M  	M  	M b  V%<r%A%A  Sf6J  S  S  S  	T  	T  	T b  V%9B%>%>  l63G  l  lflfz  l  l  l  l  	m  	m  	m q  V%9R%?%?klll ##cddd+]>>2\1]]rg   c                 2   g }|j         dk    r+|                    d           |                    d           n5|j         dk    r*|                    d           |                    d           | j        dk    r|                    d| j         d	           |S )
zGenerate priority actionsrz   z5Begin migration planning with expert advisory supportz4Set up regular check-ins for validation and guidancer}   z9Complete comprehensive environment assessment (2-4 weeks)z0Document all dependencies and integration pointsr   z(Plan Swarm to Kubernetes conversion for z% of workloads)r=   r   r@   )r   rC   rD   s      rH   r:   r:     s    G:%%NOOOMNNNN		/	/	/RSSSIJJJaf&BVfffgggNrg   /c                      dddddddS )zAPI root endpointr   r   z"POST - Perform complete assessmentz&POST - Debug engagement model decisionz#GET - Interactive API documentation)r   rJ   z/docs)messager   	endpointsrj   rj   rg   rH   rootr     s,     .?B:
 
  rg   __main__Nz$Starting Migration Assessment API...z$API docs: http://localhost:8000/docsz0.0.0.0i@  )hostport),__doc__fastapir   r   fastapi.middleware.corsr   models.inputsr   models.outputsr   r   logic.engagementr	   r
   logic.complexityr   logic.details_generatorr   r   r   r   r   appadd_middlewarepostrI   rN   rO   rp   r6   rB   r7   floatrw   r8   listr9   r:   r   r   __name__uvicornprintrunrj   rg   rH   <module>r      s    + * * * * * * * 2 2 2 2 2 2 * * * * * * 5 5 5 5 5 5 5 5 T T T T T T T T 7 7 7 7 7 7              g
$3     %%%     -(8999<- 9< 9< 9< :99<x ,t,,<#3 < < < -,<$#!1 #c # # # #:           -3 -3 -5 - - - -`i 0 i i i i iX^%5 ^$s) ^ ^ ^ ^@. tCy    " 
 
 
 zNNN	E
0111	E
0111GK)$//////	 rg   