From f35c1f6190d48cfb375de16d9442c53aebbbc77d Mon Sep 17 00:00:00 2001 From: pb Date: Mon, 19 Feb 2024 17:56:33 +0100 Subject: [PATCH 1/4] updated docs and data to work on workflow --- Dockerfile | 7 +- README.md | 6 +- docs/UML/diag_class_workflow.jpg | Bin 0 -> 61388 bytes docs/components/components_specification.md | 66 +++++++++ docs/components/models_oc-catalog.jpg | Bin 0 -> 60411 bytes go.mod | 5 +- go.sum | 149 +++----------------- scripts/demo.json | 107 +++++++++++++- scripts/local_imgs/alpine-logo.png | Bin 0 -> 5423 bytes scripts/local_imgs/alpr-logo.png | Bin 0 -> 14313 bytes scripts/local_imgs/curl-logo.png | Bin 0 -> 4289 bytes scripts/local_imgs/imagemagic-logo.png | Bin 0 -> 14804 bytes scripts/local_imgs/mosquitto-logo.png | Bin 0 -> 11909 bytes 13 files changed, 204 insertions(+), 136 deletions(-) create mode 100644 docs/UML/diag_class_workflow.jpg create mode 100644 docs/components/components_specification.md create mode 100644 docs/components/models_oc-catalog.jpg create mode 100644 scripts/local_imgs/alpine-logo.png create mode 100644 scripts/local_imgs/alpr-logo.png create mode 100644 scripts/local_imgs/curl-logo.png create mode 100644 scripts/local_imgs/imagemagic-logo.png create mode 100644 scripts/local_imgs/mosquitto-logo.png diff --git a/Dockerfile b/Dockerfile index 6f4010b..12e1ccc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,8 @@ WORKDIR /app COPY . . -RUN go get github.com/beego/bee/v2 && go install github.com/beego/bee/v2@master +RUN go get github.com/beego/bee/v2 && \ + go install github.com/beego/bee/v2@master # Generating routers/commentsRouter.go RUN bee generate routers @@ -12,8 +13,8 @@ RUN bee generate routers # Generating the swagger RUN timeout 20 bee run -gendoc=true -downdoc=true -runmode=dev || : -RUN sed -i 's/http:\/\/127.0.0.1:8080\/swagger\/swagger.json/swagger.json/g' swagger/index.html -RUN sed -i 's/https:\/\/petstore.swagger.io\/v2\/swagger.json/swagger.json/g' swagger/index.html +RUN sed -i 's/http:\/\/127.0.0.1:8080\/swagger\/swagger.json/swagger.json/g' swagger/index.html && \ + sed -i 's/https:\/\/petstore.swagger.io\/v2\/swagger.json/swagger.json/g' swagger/index.html RUN ls -l routers diff --git a/README.md b/README.md index 8337e47..b626da2 100644 --- a/README.md +++ b/README.md @@ -59,4 +59,8 @@ From the root of the projet run : `./scripts/multinode.sh ./scripts/demo.json` -This script should be updated to be ran from anywhere. \ No newline at end of file +This script should be updated to be ran from anywhere. + +# More documentation + +[Visit the docs/ directory](/docs/) \ No newline at end of file diff --git a/docs/UML/diag_class_workflow.jpg b/docs/UML/diag_class_workflow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c82658ed8b232b286e9793af90c43105fd87f841 GIT binary patch literal 61388 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 literal 0 HcmV?d00001 diff --git a/docs/components/components_specification.md b/docs/components/components_specification.md new file mode 100644 index 0000000..fed8387 --- /dev/null +++ b/docs/components/components_specification.md @@ -0,0 +1,66 @@ +This documents aims to describe the role of each component in the catalog. It textually describes their attributes in order for anyone involved in the development to grasp their role and also identify some missing features/attributes. + +This document should be accompanied of a diagram that summarizes it. + +# Components description + +As a user of oc-catalog I want to be able to create a workflow, which represents the flow of data between different components : computing, datacenter, data and storage. + +Each component has a name, a logo, a short and a long description. + +## Computing + +A computing component is used to execute the docker image in it's **command** attribute. A computing component **must** be linked with a datacenter component, where it will be executed. + +It has two required fields **CPU** and **RAM** which describe the minimum amount of calculating ressources needed to execute it. + +Optionnaly, it can have a value in the **GPU** field. + +For each instance of a computing component we can specify : +- an other entrypoint to the image : this must be specified after the name of the image in **command**. +- **arguments**, which will be passed to the entrypoint +- **Environment variables** + +## Datacenter + +A datacenter is identified by its **DC acronym** which is a very short form of its name. + +**Note** : as of now, this dc cronym field is used a primary key in order to link other components to a datacenter. This might be a sign that using a NoSQL db in the future might not be the best option. + +Each datacenter must declare : +- its **Memory**, composed of two field : **ecc** (error-correcting code) and **size** (in MB) +- its **CPU** which is composed of : + - its **cores** number + - a boolean to declare if the cores are **shared** or not + - its **architecture** + - its **pltaform** + - the **minimum memory** needed + +Finally, we can add **GPU**s to a datacenter, they are characterized by : +- Their number of **couda cores** +- number of **tensor cores** +- their **size** (Mb) +- their **model** + +## Data + +This component represent a data source, we want to know what **type** of data they produce. They have a base64 encoded **example** of the final data structure. + +The source **URL** must be specified, as well as the **protocol**. + +> ! Hence, maybe these two field should merged, and only have an URL that indicates its protocol. + +## Storage + +Storage components are linked to a datacenter, and used to store the result of a computing component. + +Storage component are associated with a datacenter with its **dc acronyme**. They also have an **URL** to reach them. A storage component has a storage **size** and some optionnal field : +- **crypted** storage +- the type of **redundancy** +- its **throughput** + +Finally they have a **price** + +# Diagram + +![](models_oc-catalog.jpg) \ No newline at end of file diff --git a/docs/components/models_oc-catalog.jpg b/docs/components/models_oc-catalog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..313227be0d74657f3000cb63ebfc173301825981 GIT binary patch literal 60411 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

-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 DJ>38! literal 0 HcmV?d00001 diff --git a/scripts/local_imgs/alpr-logo.png b/scripts/local_imgs/alpr-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b7ce5d808b6b59aa8938f757fcdb19661f363d GIT binary patch literal 14313 zcmZ|0RZtwx(>1)XxVy_jg1bBHBEj9=-QAtwn&2*hKyY`5;1=B7-5uWF^S}EpzNwn& znlp2%=W1rEyHAvof+Q*u5fT6ZK$VsfSNYEd{nyDb;QkvM`bOLTGccAAc?bYdn}Gag z4Ex_4WGba14*>X3|F<^`0C@Qi3OWJ++*tvD6C(hCKOF$Tcgk*47W{7k&O}yH{PTYe zQR{K-KLp-QT3!PF2pS&=Q@|k-dhh9NHPKo3K@u>~$yzQ|&{NCzDPJve)SGV#r z6I=G7Pwt3=kn=weKaeRDz4NrHs|&8WC@G%1!$L4&Uk+wPF>WM*5eAwPz5gr zR6}z0gE+EH76V7mH=l?Df#A1xG|;?Iqq~kb@4|;yzbnUf&*|lCyzTZ(ie%20DacCl z-6e-jP&VD+h(Aas+N2MWw+~WF==7IRG9O-OA0d(LrV^*erVHz~=f3Nd`_M<}&Pr)8 zL_gpBJKjFgWZ1NDfe;Zha8uB`%8TdCvHa5UE$(yuX%-FauF*Na;bgtN@4?e=BvD?i z;J5yRN#Ou9Ru3{^JWGI}f}*2e1W;*d5kMJc8=;IeVrHsJ zx8)M^@%fb{OjSbg=9IFF^dGn=og8N1sm^Iy!~W>TKOqhY4vmu+-IbHw*E}Dd+vud= zNr9h#?*QCXj?A5hbQKp(FLw+47=d>=!q#7{6s)>5!-LZ4sbjW-P**RBUb>N(bT~nt zV?sBqr5y9HC-P3V7Y8}EjCXcx{blc1Pj4sFHNv62#c8sUs&|39m4UmCZ{AZol*Pr}<~`V3oLkKUoBT7CCfZ#91Gn90D9Pz`0qlLLkEk$kf^Y(J z-}R`mO!5+q#i%a|@q5Hc4^@I|^lZszlh5bh&8I-(QIStEyyRYX6mImTI$OmrPi>bc zwz@ANRB6RE`#7}iDfXjYABU))l3F!Ju*Dhwq+o)Hio2BGjc#iz!#lqiKd<4IppqHI z^XM{_f3BXq69?{o+P_gkx2POPpKI`=IB-==?iqPKzUhw)q~vF-$1}t{jQ|3(D2W=t z;es>?L4sd@kG+72HplFPz!4uT$>10~reOpw6{24ABw5GbZ&&7fJA$g}Rw?cCC)5|8 z-W=96|28ZcgI6^#VgqV`%R`VS%90Q%oa-I3WI=6q+9!-TJ+)oY zK~)SZ{1z%BsK|bky!2-d{avNqe`lyp7thaMG{;0Ay0VE&P(c=Kp=?383>rPiEP}lo z%fjnjtWV5is$-{UFtMmt*X76?s~zp$;ea&WDPgalrxT^k{aXify8C^WKxJ`EV9QSQ zE%_KjCDt+ga~^#B_$mexF0&h`21Sp|t$4iB&&a|2!qNk{tomR9Qe33z?cJ^N23^gH{z_ZSA+%pn` zZoCpje;`e<-68O5T{%wn-NN6lF(^ZEKx>;Uet_8@eJ79`BWv?E2U!(Nnz zCz%ETu<5amARx4@^df7T+|Vhc*H#&#r~O8e!a3-}`xT7s`?BY^(&;Q~GrJ&MVhujK zKgfxZ`_|lt# zz%dt_4Sx;AjA3+Y;*>4_bk%Sljuu%;LWosM0_UN(QV-bwm0>5-9=w2yg0c)2rSD!y z`6fqWZn*RUy!NwnZH=E>aHELboM_IN(fdKCE*cKI;!3XNt#b!p0^%?prEC)%sCK7z z)t8+_PlFAD?u}_z%SY>TsynUacky;wC!&M7rCQcsT~hb5zVNED@`2a;@=}qCEtw<; zqwdAOBR|D2bsBz!5KzO>TTEXp{w!Ih2`SZXCmoO_D#*e>eYH}|2uYO|y^g@%oX z!AoBU^&xMgSJ5#igao;aQKY-)Y*|lY7|yz0l&xK z_~2@x(eGD3wVV-67tt(UUU`}-o#@NjravBy_?SYMvgw&o4y)G*R_Etnu})R-qBtrK zEEXU|{Vy*nw6&95s_oc5 z6=UQkm+pIyiHuvL-A0iFK)Y^>%stV2T+wUq)a;X#v>vjw=C12Kc(y$4u2xu<`{A}+rv$GQ1#c~ ztazeWnc<@VS@1J=YcLzW419fgyLql>m_+T~f!;m)yP1U#&-TS|D&ZZD^N~}NQ#Dxl z4i6j50pU>KfU%OG6@Zisd$Pk+bXEZE)VGQy8x~LhvHpJS2w)Hc70X61z8bJPtS$M4 zQbVU?d`D!|k##tgsfn#;tnq^~X?oJZf$=u{HY}GoZzit;G-Oo>KrSq@`VuYr^l^27 ziI=Wox{@UU=XB$2b9MyZ@ip_C(Z{6U!at0;;}aJyT&r)MDiEf!)U?iEdq0N9+uj{v z=V5M1UE_Npt=)=4d;MTzcDVrb1^NZD1x+I|djpee04C*Vv~1!M-$*h$k_L~Ss>`Ye z!m<)YiJRl_yY>YbJx}pSLBp~Mhrmd=~ zfG4{>Lu=>;t!~}!4+-2TfGxfNWXK+y=F}>C<2GhxB_agsa}a>Ba|1u`G#~%@Lf7YB z^L0dt5?n?PKQ?c4%G{mE6-;EtPFDK%x~s5KpYXLNH?hoxLF=SU%*;EVe%~1?6`O@<)s*{Vwg$kJP8vfCdhXf}*o4R4-GL;Y z7>v7z&5ePcO@WC#{9MPXZDdnkMM+q-A#>g2B`R7sqR-X4Cp+lD_dSH$ROPRMm;vwf z?ki+SQdFTao1Kp?f27EHUha7jRq-i`&V;X&r_MFD8N_s}H2i>{-y^UEK$WXD z7nxPdP3;?SS#a;c(C$6RYmDBd$0N@6hA*9=bZU=iiJX*YgOg0=(o?r2MafqDLOKtQ zvih~73-1xZ;xcE|X6#|sd{ew^Shg?kHt4xDgB2J z3m;w*+WXG!C4DQk-`kdro*_!&6<$D+!>`r7wPmKt5zy20j#eMvrYJOjoKmL2gIssN zgo?05irP46ml?(Z5$%3q7eh zop)F-&}F^5O8nA!7L?kMPoZ=s7WP#qrm6+tnnAGwAS{G+gc5KLl?pPS#=rCc z_8Mxi)NoWfiK#|}HgTdPPL^jZWF1HtSoqFLB%_Sd^YcC;I3CB?pd|d$KUMm`H4CPAP@oa4W3NbcXiUSgl>WkEOiZ-Lv`BZ3{rtWgPc)0T-*n}G)eVE7f zi?JbMurf}}kABC9x2l#c6!Gg20;S*Ou5&^`P{6;67rOTp_(no+0m?G8zfjhft@KGs zi~gL_hdxuE1io1rYGEc+52Od zF4Xs%eLi5biHiNgPo>(6;}q6~O;F$-x= zE1oX-&ypCUn~f3Xe%(+{u4>LH>>j7df{1tu(#+=J;PnF`+yt-w*!p@6<{V%+hM3d> zE^8M@2@!JtWLNtExm*aPI`Ziaa3?krn zh3lyP9`of#P19x@)Mh-ac~vPhJ7^>sCvOFloyTH>GZru-M=)TJsBVtBjGtZ2%j8sn z{)Hd4dbybxCU<0UA@ET$E&z#`I~NV_uUFQGZ- z$A725{JSJQd@gz|{E=lln8w>#zrRkrYwz~?$Mlhwyjut?E|%`~%lX5|X%?BqAVDW; zoV~{z+L0}8eIEUW2o2vi%M~G*NBOq?9WpbX=KUrHsAC?+dsL2Xo9aE?)ZZYBn0;P| z3-;}y4a0P9ySwo%mr#eIlx>PIrc^5OzI39Bed!AjNr5+z1cSQ=h`v@pc7LOm2TPGA zT9QJDYNM*HUj<*0KKv{WL@n)+*oxzvMjfEHFCN$FL2&K0#11z2`tQha`bZL(hHFN( zj1rLk+P`0aedX2vb7x8fIH>Q8mGG>jl#H}cxzOC?Jl!HeUhE1Q_Y+vRRpXaZ514eB zj-YQPKr1mV89R`6T72Hvj_~cxT+|t*hges;X~aV|vb^D+;({m~LN6cIkT={rVsj4z zMsh!zK1w&p_!Z7;+9a@Boc9ije07Z#M>_Y>rl8pj!=hxa%yxeMnEC>0Qd~RpRE3n$ z_JzUM0FePF@bHWbqx5xyQ+KF?}k_1|oV+`4r1|bkfn7Y5Lj4*s%+KM9cyV=&HX|NtFWH&k;c>xZS z(kFW6?akz=w&oP`kq`bs_MB!(C@33>Z&sdbTRwuve)x!;SwJ_Jre<-cofc_cQcgAaBiV}aCcxLf+2B#vCfKX@`$ z%H_d=1#DzsYL*eWA^lAH9ZXtBYiZ)1VdSq{v3O8*c!yHJkSI|o+eDHcn@B!~3hPtk z5weoyI-$sI$}n5d;V6w+NKTrI(i!x5ObtGb!947$KUZ@mDjGi03oaA1PW9U3Z3Ez8 zEXjrs+)D-dN`j1 zT?Q7cCn)NbzUhjwBE%)`FiFMPcgq7Eb0sws=#WzBm+$MdLQJD~?ITP@W=GO93dTra z*+e=XVpPGuV)$g_m3HSmRgk?IV6$&X(VwUG^L{)g?7^H_tf2n83`W{aO<-xndstf) zIH`fDRT{^~2CY&YT1)~WvmTmu+M{{^*HR6D3*}@&kWW-qA(CB3{fO(MD=((6%jWmN zE1$8`SYA>=x<|FBXgD^5Sj_sMc^fW1KnRnBCtfC0E0*3+8%&5>;;A_%20sNato7JG z7R&5lW7BZ-JQLW$NF3jwEHl4McU9N2u{q?L!u}gSj?RMdwto>ZWj(6G<436E8*eY$ zFU)OD2%R%KD*fWTK6mNw%OF-pE|Li!B*~EYXb$J;vv0FkKIITXMju3MrD&dRy|52^ zJ)zv2$sN?{qS*Pl5wNww4e6f!nUgXHsZQ%_>#BQrsaiio7b4XpyIe^PUeL0IIz~RM zl=dCxDEOzI0JnmjUq&rx{iYc|U>K49%{d!nnQQ-b-AKM1KhE_cq`Y}jVJ|`})cLnP z*T54&^`9Jw_1C6b!f6097X9KiL6I(^M-dmK4|z|h#2D5*BVCaqQs1nj+Tr`MC;8@Z z8@x^6-)m?SG)s9U0kGd=c2*M%7{Jo&{>LE`A^eZ2P-tT{B+fc#5(#IvI`E z?&|5lZ=oyq5sPcEq#~zR+A%N~D%Y4giH^!nFy`$pIu*hArv`Yw?l>EUve?I2fzm^% z)~fRdMh?a&rXEl;qMSv-7*Zgp{Jhf3-y-NTuEn(oFSl>joegL!6MnSr8bN-0UjTD< z>gr>m%T^vWc0lELm*h9IEkBlrn0u#7Bd-Wau5F_Uv3rG=-uFKANf9y>JQ`VpG5*B* zeQ0mMpZh;ewSD?Wn)#QZ%!gp?%BX2Z=)Tq|(;h?`5{O5d(0_NJlxm$hMLKgPr94CL z-E^|m%FD?8kK>GI1|{9qK0D%|J{-zVnh<|IwA36kg3$cI4!m39ucGVa?mzzA1H9EY zlB0~4j9aqy5o{l;RGXT^T7EUVW9J5IQFN)j+(uCCgr6@gvZGGk%Zxi7qb;bOXu2>M z{bDjuD(jRC@<89q+SU?XhT$S{v32Xs*Jd$LK^>5v0eH473*4s`b9Gp!=17vhi|~R^ zcjC}0)b|Km(H&wQeVJ~z$75hZTbTsW*-7e!;9Qee2?B|ch`0m(MB7k=EEV$eSxyD!Kl04K=s8PYm`I2I7nloQc7S?~8idI`zyFe= zKV7f&fsIC0;PB{ zq%SXGOMp_sRDyTV3&vo5J+#Q_@_hMcjP&I70^{Wmm2fE%7Y8k_j4AU)>O94V?i`mO z1hq2GFjU}T@8u$4P?{voi-NFcx1U%wfX1^1`)=&s`UQHc5#(u~U;}FZr@sI+VhUQL z@*ES}BF-Gz5P;G{YfE)n2&}5XK|{EC$!R*>a!WmvIJVNo`l{{eG{YMKFE}hTX@z6&(PX!c-Y*4&B*Q6L$<&d zvgGeaeKS-Bwh&jXpG9Y|y5US>m4I$sRB-}!k0sIVk+4|01-|?a>{VI>nbHhgXAzi5_{M5&bR@M)Kg^WS-%;#>%d`Os!;>kO81gZDdEBo|#kc59%B53C+VcnoVYA2{+tx#u>v9Af9*U>bDv-FI-{NQDtmscEr>@ zrai^P?)3V(JH$elJKY}u|0gCKBq~AM3CSpyQ#%RLqeUNc!!VbKt099_sG8ZkBFZU4 zt43}x)R&j3^HkKzrm%QxH_~K*OxaQOtKsXTZ9L=$)pOxyTZHj1A=lj#33jx^W6WE3 z8^^jsRjjn`TdfygC=8GNvfkR?<3U5g*BIKgF0U~YU}S35x1XCL2jO$6b(Q?MqyFm5 zg}+$bn%oT*e1s}W8&vAAnYGAtOqfDJ+xk0}BSk@Dej}V9771s79JxTZ5Y$reTO#7N zoy?BDtLkuFv$qT}tps2A7pa^#4eB0r$sM4a$5sEu6W9gJ8_l{6bSaBX0z$%EV0~-s zlW<#6({g_7GR05->Dq*CpG`cCt!g^D37q=ahaocoyb@*(kpvlYL^FD70eUa>b!>G) zC$%%^CxcI&>>F5vHxy=^2$hyz(cRe>0%L#9L0kk`K%lwpXbU#EBZIS&T`aApi{+5B zCMV1OR}5L0;f3)e_$`m%M~+JDf_cl2W^-&ONgic6=t@cS1n3JUidt)vp}l9&+W=!N zj#RBfEptSy4-L^d2l!xpHUs_?=%XA2A@_Pprm{{vU4}vfo?k9`M)1R)G?ZeYIe4!N zx|~BdHm)d70=DmHNQ3bdJ0RRnE!5pmZ!7kWM94QedOf@tjuIVLVGVWGjkD`pqIZL* zi~ba^5D&9SX^g5q30@%jzI<+oM!8UhKHMl|f?}T|C_&{dGQp2)#IB+e8*%gaA?IzI zt%Llo%jm^3u~X#L?SV?G#oKv?D-LuRJks9)Jb{}>ti(fm_xU z_Uh1rk`N&@^0-DW&f=`Y2sK!c^ zpY_7WQ`~hqXYf_`dL20|p(nrE%G;q7U3RY-?k-21$o$_{@qKVkQvW&7=s9&x->x9G z_?~X;Oa6xJ{&Ajf0nBEMs2B;nPT$r8dB^CLaSSRs0_eD$-nC@N$Iw9rgW!k_*;75<9cNxdYb#w>bz|G{!Uf?=F@ zy~2+)UOX4zf)W<-yR*3~jQn9plfyBrs_fb1{BKax^g@XFO-^{21|piYCs@iD)1pVr z4L3A+Rb?0^aXFRO)d3U}^Y!xw`SB!Sc5jEwg@zEQ`Y+FKjYd9eLmF_u$wnjaKr31(w&%Ren9-M+nGRb<8!z^d&TftwL$ zBuWwmJH#M~XU-F2T5v1!666%+*}C8G)=XS!W?1I04Rov6_|U#3t#MfO=|`j4!bBfv z#_(jX3V5?mXZQT`S?D#4pVu7s$yZZu$^#JrnmqpH9}tPS(<5|e9}7(^46Y-xTeW+w z)S>OHQTtX)I6X)+UayWk?J;}zuLGtv?UEO|qkwV$BM#~s9)sE#hXvH>@lqp)ScD#+ z?6`nBy`~CB4+J}y!!!nVZBpCE+tAQ{=C74v$!^6+m^Oq$2g`6`<9@UVeQJKx-(&|* zG2cgBtfA(Tk$PHsI1Z2eoSoqW3}8A-*?p9y^`7s(JR|g(Q|p!GtxYk4%Hrsh)q~9u zOnT0vs%rnC`jCwUPIUpFI-2sz%tAZpHL>C4-V@z8glqiifJX0yN6yQ1R~JT;x?GsC z-z!9h3!N_93PW2N=l&e2>w4mAi4$f&)6uJK)W+>#tn-ddXrNIW_!C$VAc)tHp>ACT zJD$QkM~+Qz{djDCfw9tKo}zn?m?s=UkNzx8gmF;{wjUTK*{bFr>$@|SjK52UmkuXd zcV$_86>ZgbFw9KrX}qD!_%BjWKC4X@2E5$W$$AlcuDy_G?1yA^i+v1qL~O|{m&;$E zz5^dn}WBsnnw_xvx z=azZI+|78Tz!}hMDP>m=MYc$loHC+?YMfI z`nhMhQRhr-^4T%X9HW!qgJ!?J$^G_DIv6}952{By{H9k1@O2FIJe5*aBEeOZfX#}S zFq8*)%S~u(LjEmMTWVuWp8UMg)d@B)8<*wFCpy+D@bX@q&HO%XQPI8OfVotuw6pXf z`)m)prxxEIN^z`SVb~94pKam-J(Fs?7p#lDDbg?*k|uzfWzP{5jzR@%w`<0_2wB1u z4X9a9x!gx#wfytW+Ap&BSF31`D!ZpaQJ>ZqkfFtka022B7Rb*{@|1?Y52=tLOT^cb z=uALwe?ulE8gNztS5l6RX65@R$5w-LzLH}?v4>S(!408i+W&&QRs##q`nI>*?yPJX z%^d0;ekyLuXVu-xxo*})av6~@+y5`c+JpeioWF5xJNuPJ%Vq*zr5-j6qL*vCp{R;@FtHBurT z!8^J9UZoOHDo~T8K#xJI5pxNJTJ_e_DtV)-AH=TeO~o&YIE5t)QQUUE!@j+(hG^=x z>j@x4uhSV+N3vK&+d5c5e`;-#K`sy-K3I208wO@N^KV9F>c>j@KG5J_$n)UQ1HCwJ z%3#FOjWeC`Bl##ZZS$QM#BDW1jbBCmZ_tB$!hP)j-cpf*J zn|vdKyTjJWHh-`81Isb*f%9@kil$!~#IFtjR(Z0=FcKgzpQY+iq%+Hs{- z9j{E7B(`%kxAca&q2hO#or686P|j(3Jlspz20@*xn4U{Zp&^;1r4I@6UOGwMR11m3Pae^ewrB*J^=|fwQvbv11dIXSs!& zx;oa6>(yUwNL+KmbRX;%G7gnd&b}GC0=B0gg4Q-OhM~d#4Kw7MpI1#@{EB}NeenH2 zJ{8VL&rZ-t5Q?*?taOMxZ~X2Hv+H-={J44Hg;=;(^#|;8p5W~&3W0LYVL$fn3KSHa z_hUF_n(Q<_9-w`CQ`x~Y%g6|mOGF1$hABrgQH7DM@o8z*>$9i)kAqlt7&n1z1p!Z( zm@Lj(Y^NSD5jm0#VCXH=;JU4w1F_G3rgMII+P^MeGP>zs3jPb~;K! ziFxs6?l7ytrz}2KEMLhd;^tydzGq7{M%h8#`&Ge!9MV+1$~~oYwf3)lHBxfxPHb3{s}YQ2Z*JZrD(EP@{WjFMMlSn(b_8^* zD7E&@uWSu&wyv}ca}{L#?}lwQAw*r?Aw>zNv<1=k+q(SBF`*|GC~WjLSgIK|N_3VY!8L3?VhN_Z%VcgH6kh=z)7Y3P%6 zcP9d#=Adp(d_Xt-Gxe{FWn=w%43`DrRxAS?f{G>UHh_>s*bnq0W(RsQFpsm?H2^Le zfeJuCvq3xfG0@nM{x{92x$deG%a=lP-l9@K0}it=&w7zGEG9N_5%RPhgB}TZyM`@G z@yQ@x>s&Y7qlYuj;+MB-+^y#Di}^`4?SfK)s8LjTnAajQWaFq0$hhT5u;3HZ0BiW~ z(k7nn<9QR-3`L0=3EIUD2cQv-WPF5YBsNl={<$Wd{<#qg+SnlYbmYpzE^EnDF151YO#)zdVX+Y*u{#D`qr2e!~+U!bmSWqL_+Z`Li;ng5GRx zl$H1;n1X6-Yzb#iitk}|J>Y=*01D5ORWehRvHM?@b@OqEH~SLY(zn%%;QPk=P9_vN zZdZp}uA2D~;jWMDcyLytwg_n%3 z%tDJ%Bi1FtQA_#Y@t+yj+UmVc^G%BHoHRd->;FuE1h^$fq@kPYe_r--4s*_~0qkh( z(&jd!7>gD7$8?O2thEx|k?Zg*NIAa+`7v!42Hk(>8d)G4m!A;&FNgShWZ4CMPj4)W zjTDYgeey?pug4-@86NyB+^q5~tx`-m?wqtyx+!mB3Ur1iyK7x$NN+F34=&WXq7!Q_ zVn%!>^vWEH+nDi6IApUniv?D@4>JL$kyWa4Tz^D;4G(9Vbo)PXBbDeYv; z4k%5VWI|(F&UNzi1Zm;uQRpXe2rcSTXl!b=*X@kaH}Gl&x3fGCI1Y2(GeQqOmwiuU z3yw=Nr4E{ruIp~qu_Q<~-1f`iHtUk_Rxw%L9_0t&&~Ac=P<5y~*MjB-8FJOF9(0bQ z82RIdwDHe^!UB^I_I{(jk*LSR%aFOUvY)feVo5!ehB!}9)Op$ITz2?&w=Ye{0oYF~ z&lWzmpu*GL*QxVf@0?kJq4Q~9!|D>!-~A8f0+ZxkaQHrkcP$%u$=jI13ja>*iivyq-1Ap(vtqlZF0qf|iF#*0mKE6F<|CTSp?G7%O@wTr z@x|gk9@~g#ttwg=_uD4f{zf3>6aIC1&Jdc0S@l_SEwZ3TK;3gI`O?4tPG?)NdxJ)$ zdlrEwo5f-WutVKExLP-=VX@d;yAX0yZ8!M5dy8)rS|EL0Ap65ug{3Tv=R&&y*P$J24XgRO?;$^1)1hZa;NcZ7qr8}R~F1^S9J(#z(lK&vdimo8g? zNg*QhUANMcj(K0^?<>~103jVdJJ zsDecEYr4a?OMf3yxlqF@Z+`UYq`?Trz}!utne8b7Xzc1BJ2uffC}%Kllnm%0((4-T zzwfBfQY^Q%E#f{+YM?~F>Q7)ci2&1@*TxN$DI?NoSBRl5)E@zvIOf2N|1=(F$s7unRH zmUidfOAl~QaFC66SGeHjA>9!!&?NsxZ5i(JA66z+W9Yenrv+Il6mIPPY4T+Fltt_% zn;G?hTudub7J>*2xvzHja^kXx}sj2ZnvNmjLPFUu=&0Pf!;8Zn+j4+!Q*5ZGuk}8yt7LKyhJ9i195TP00}%?vJ???lnH{4 zmPLClvf8@$@UH1Y@k@oAhAo~2&1=|WjYIntHy)8Xz3k)A8a?t($GPj|2`bs~O$S}<`pf0K-w~`afD0P(KMAP~; zohMUMYqIYYu6n4u6WOAuIOpDWSSQz<`=vi?wzhExn_{ara8XdwNNRj5UMQ>YPL^Yy zDzsp%d~#NoxVQR;Aux|3QH}oCZ&Z&pXN1riDcFzWX8pnNISTlMncFJZw~l43GAdqe zTnQ?$=_~olwATHafBh3H|9Wo8Rw0O%LPiBg+!CpwJ3*F!9ac%jNTFrf}2UQiUseug{{(m3!% zy=7!d@KbcH-x9|b`oQSyKIRmX2hNJ75sy$dwZ64Jo->N86%4EfK0)RqS_`N9$e|zh&H3o+bT_J1_w2*04n!@# z@d(ul%BKy zDLaac0n5zSBg(IBUp?eDV5W41ry}D+FS6R*9UcYXS2^`py)<)-6L-=~KD%h`6qjnB zdQ50%Dxcc&$@1-s)(czF7UG+V7jBINj2WzM;oNih*PC#0c-YiXfF3*2t{6ju63$R0 zU9Rc&pBy1>$~V5NW!eH{&re8k9aEwjO!%!72o1zIXe zp;!AWgZRHM!lU=aEYci+{~&F{pv2y~^a>y?xeE*}`2)*mga1=?*NGDq{;;u2ayD9% zqn+-&rqZ3dQiABLk@EWYBAV)uQDXYR)YF$m!hk>AjR88!EuK#SuaTnDtYrl%tAr=( zWm(FdMaib{VwJ8?YSb*OB2Bol%SPNmOD)2i`Gg^=rANFK8)K23UGe$H>w z-}AvsUp%fy3TkwUxFHanJWPUiVm+?&U@wX~_QF8ok#U zyUr2yN?mHL-o*!@ZyM`Vj=_%Bn^JiSR~fc>491sWzGA*#gh)GOUgOV(%37wG|4uYJ?c0Z`PYDg`T6hT&&X|+oj4y}oQ?pWNE6_1U3vNv5JPe$&JAk)06&E#EfnQN0pmmg_ZoYNcfR3Y?aQ& z&4HVH=SM`I0<~{CHqSVZQ73Q^J86xYkWFSEsaDXS;-ge6xplUmyyLZVcxW2mi56Rq z_*YwdH4eVFHp|p~=qAyNb>@d2RJ0;XE}OXqRHQ-^9f-K3a=sbn` zqxx{j(PVX1$4scDFFJYii_!Bq`{)ar0Ziu`^Gu82;$L3ey23hf4+E#A?V273@~_%IPKv`J&;9$PvSs;Y zm59p1(z$;xqcpKC`=2lHMXUUgH$=S9NAz)Q{?1)hnZdsZzofPaU0Ez;`8u-n?E7hM zZ1|u#Fs!w;Z$uCc{&_50Lf2DhWAtD~onp^Rh^>N3`cCO7VGsQ-|Bl&7s+O8UoYoGc zlr@XCbh5cCo5Uv$?ffg;%M3UXD$UaOXXX9NpX<2<nPImO{pf;i{ z#8$eI`AxpY-ra;feq0I^!}pC%A8}Os7u?OM)DE8X3i&@>M8YZ!D_QyEqX`0q3fEl% z_~H%DqpssozssgEGqu)YBi+#@W;k-F#g${}8Pg+FVhr@3Yc$WpH*SsG{eGdu?8|n~(NC;!|+bSLt*JCDUp9SYOlDkkslmHiY?VKQ4&Ng&DPPWqdyf zIaOX|Cy=c*RJ4OBcKT(s&*5(H{$of|jRMg^6LDkH@ zk$hEVeAu_Edvw`Ji+=S(+h)h=Ad`c7a5;0Gi>MLN0%9(s z*lV!F!C{6Wm-J2(D86?5BjJCQisQZy8izY7ybQ&N|BmMPa736{7;-lqbMY~-vhuUCwrRC0{C^1cj%L;t-v9rE zF<7XZ{|Ki4=fTy(lHb(P-rn574FHlfcQAJ`c5`&$2SLmnP0T^kc6RQrZvTTo>|D&O z%&d$cRSijygqM?}iyKJE&fStp+5yD;KTyNm#nsx;fgi-p%*qN9b+@)N1F_P9K>o5k RV*j}VNJ}V)SBV;h{68Hbh@1cb literal 0 HcmV?d00001 diff --git a/scripts/local_imgs/curl-logo.png b/scripts/local_imgs/curl-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..04e7b8b73454e3c31a884bd1115edc6639c4b043 GIT binary patch literal 4289 zcmV;y5I*mTP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/scripts/local_imgs/imagemagic-logo.png b/scripts/local_imgs/imagemagic-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cf708da85a318c487f0dbc38511dea83f5745a58 GIT binary patch literal 14804 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 literal 0 HcmV?d00001 diff --git a/scripts/local_imgs/mosquitto-logo.png b/scripts/local_imgs/mosquitto-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d2450d616296c3978f2e5d7f7343bb1c1c0c4b1d GIT binary patch literal 11909 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 AA^-pY literal 0 HcmV?d00001 From 2767ac41581c50d1d9b9bd5591bb40c664d9be9d Mon Sep 17 00:00:00 2001 From: pb Date: Mon, 18 Mar 2024 11:25:59 +0100 Subject: [PATCH 2/4] applied models changes --- docs/components/components_specification.md | 4 ++++ docs/identified_problems.md | 5 +++++ models/computing.go | 14 +++++++------- models/data.go | 6 +++--- models/datacenter.go | 4 ++-- models/storage.go | 3 ++- scripts/demo.json | 9 ++++++--- 7 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 docs/identified_problems.md diff --git a/docs/components/components_specification.md b/docs/components/components_specification.md index fed8387..4bce6f5 100644 --- a/docs/components/components_specification.md +++ b/docs/components/components_specification.md @@ -21,6 +21,10 @@ For each instance of a computing component we can specify : - **arguments**, which will be passed to the entrypoint - **Environment variables** +The fields **input** and **output** list the different links coming in and out of the computing components. +> [!] This is redundant with the Links object that we create when parsing the XML in oc-scheduler, might be better to remove them if proved redundant + + ## Datacenter A datacenter is identified by its **DC acronym** which is a very short form of its name. diff --git a/docs/identified_problems.md b/docs/identified_problems.md new file mode 100644 index 0000000..36081e1 --- /dev/null +++ b/docs/identified_problems.md @@ -0,0 +1,5 @@ +# Code + +- [ ] In most of the components from 'models/' we have a method to add input and output to the model, however this linking of components is already done in oc-schedule when parsing the MxGraph. We need to determine if adding relations between components inside the objects themself is necessary. + - When running in debug mode with a breakpoint inside the first line of computing.addLink it is only called once +- [ ] \ No newline at end of file diff --git a/models/computing.go b/models/computing.go index fb0aac2..d3c58e1 100644 --- a/models/computing.go +++ b/models/computing.go @@ -27,30 +27,30 @@ type RepositoryModel struct { } type ComputingNEWModel struct { - Description string `json:"description,omitempty" required:"true"` Name string `json:"name,omitempty" required:"true" validate:"required" description:"Name of the computing"` + Description string `json:"description,omitempty" required:"true"` ShortDescription string `json:"short_description,omitempty" required:"true" validate:"required"` Logo string `json:"logo,omitempty" required:"true" validate:"required"` - Type string `json:"type,omitempty" required:"true"` + // Type string `json:"type,omitempty" required:"true"` Owner string `json:"owner,omitempty"` License string `json:"license,omitempty"` Price uint `json:"price,omitempty"` ExecutionRequirements ExecutionRequirementsModel `json:"execution_requirements,omitempty"` - Dinputs []string `json:"dinputs,omitempty"` - Doutputs []string `json:"doutputs,omitempty"` + // Dinputs []string `json:"dinputs,omitempty"` // Possibly redundant with Links object in oc-schedule + // Doutputs []string `json:"doutputs,omitempty"` // Possibly redundant with Links objects in oc-schedule Image string `json:"image,omitempty"` Command string `json:"command,omitempty"` Arguments []string `json:"arguments,omitempty"` Environment []string `json:"environment,omitempty"` - Ports []string `json:"ports,omitempty"` + // Ports []string `json:"ports,omitempty"` - CustomDeployment string `json:"custom_deployment,omitempty"` + // CustomDeployment string `json:"custom_deployment,omitempty"` - Repository RepositoryModel `json:"repository,omitempty"` + // Repository RepositoryModel `json:"repository,omitempty"` } type ComputingModel struct { diff --git a/models/data.go b/models/data.go index eb36d25..a0db949 100644 --- a/models/data.go +++ b/models/data.go @@ -11,15 +11,15 @@ import ( // TODO: review why swagger are not using the metadata when we do herarchy type DataNEWModel struct { Name string `json:"name,omitempty" required:"true" validate:"required" description:"Name of the data"` + Description string `json:"description" required:"true" validate:"required"` ShortDescription string `json:"short_description" required:"true" validate:"required"` Logo string `json:"logo" required:"true" validate:"required"` - Description string `json:"description" required:"true" validate:"required"` + // Dtype string `json:"dtype"` Type string `json:"type,omitempty" required:"true" validate:"required" description:"Define type of data" example:"file"` Example string `json:"example" required:"true" validate:"required" description:"base64 encoded data"` - Location string `json:"location" required:"true" validate:"required"` - Dtype string `json:"dtype"` Protocol []string `json:"protocol"` //TODO Enum type + Location string `json:"location" required:"true" validate:"required"` } type DataModel struct { diff --git a/models/datacenter.go b/models/datacenter.go index 3a66515..fdc1db5 100644 --- a/models/datacenter.go +++ b/models/datacenter.go @@ -32,9 +32,9 @@ type DatacenterGpuModel struct { type DatacenterNEWModel struct { Name string `json:"name" required:"true"` - Type string `json:"type,omitempty" required:"true"` + // Type string `json:"type,omitempty" required:"true"` Acronym string `json:"acronym" required:"true" description:"id of the DC"` - Hosts []string `json:"hosts" required:"true" description:"list of host:port"` + // Hosts []string `json:"hosts" required:"true" description:"list of host:port"` Description string `json:"description" required:"true"` ShortDescription string `json:"short_description" required:"true" validate:"required"` Logo string `json:"logo" required:"true" validate:"required"` diff --git a/models/storage.go b/models/storage.go index 1f04624..397cd82 100644 --- a/models/storage.go +++ b/models/storage.go @@ -12,9 +12,10 @@ type StorageNEWModel struct { Description string `json:"description" required:"true"` ShortDescription string `json:"short_description" required:"true" validate:"required"` Logo string `json:"logo" required:"true" validate:"required"` - Type string `json:"type,omitempty" required:"true"` + // Type string `json:"type,omitempty" required:"true"` DCacronym string `json:"DCacronym" required:"true" description:"Unique ID of the DC where it is the storage"` + URL string `json:"URL"` Size uint `json:"size" required:"true"` Encryption bool `json:"encryption" ` diff --git a/scripts/demo.json b/scripts/demo.json index f6cccdb..d59a324 100644 --- a/scripts/demo.json +++ b/scripts/demo.json @@ -255,7 +255,8 @@ "throughput": "r:200,w:150", "bookingPrice": 60, "inputs": [], - "outputs": [] + "outputs": [], + "URL" : "" }, { "name": "IRT local file storage", @@ -270,7 +271,8 @@ "throughput": "r:300,w:350", "bookingPrice": 90, "inputs": [], - "outputs": [] + "outputs": [], + "URL" : "" }, { "name": "Mosquito server", @@ -285,7 +287,8 @@ "throughput": "r:300,w:350", "bookingPrice": 90, "inputs": [], - "outputs": [] + "outputs": [], + "URL" : "" } ] }, From 28ed951ee56086f05ca42b1a13db6092240cfbf5 Mon Sep 17 00:00:00 2001 From: pb Date: Fri, 22 Mar 2024 10:00:35 +0100 Subject: [PATCH 3/4] Improved doc --- docs/identified_problems.md | 9 +++++- docs/lexicon.md | 6 ++++ models/workflow.go | 63 +++++++++++++++++++++++-------------- 3 files changed, 53 insertions(+), 25 deletions(-) create mode 100644 docs/lexicon.md diff --git a/docs/identified_problems.md b/docs/identified_problems.md index 36081e1..e1133a9 100644 --- a/docs/identified_problems.md +++ b/docs/identified_problems.md @@ -2,4 +2,11 @@ - [ ] In most of the components from 'models/' we have a method to add input and output to the model, however this linking of components is already done in oc-schedule when parsing the MxGraph. We need to determine if adding relations between components inside the objects themself is necessary. - When running in debug mode with a breakpoint inside the first line of computing.addLink it is only called once -- [ ] \ No newline at end of file +- [ ] + +## MxGraph + +- [ ] The ConsumeMxGraphModel is way too long, it should refactored and broken down in different sub methods + - mxcell are put inside an tag when the settings have been opened, wether values have been set or not. Maybe we could find a way to make mxgraph add these whenever we add a component to the graph. + - then identify the links only +- [ ] It is unclear what are the inputs and the ouputs. It seems like they were implemented to link two components, but it seems redundant with the identification of links \ No newline at end of file diff --git a/docs/lexicon.md b/docs/lexicon.md new file mode 100644 index 0000000..a4e1259 --- /dev/null +++ b/docs/lexicon.md @@ -0,0 +1,6 @@ +- rType : ressource type, can only be : + - rtype.DATA + - rtype.COMPUTING + - rtype.STORAGE + - rtype.DATACENTER + - rtype.INVALID if it doesn't match with any of the previous type \ No newline at end of file diff --git a/models/workflow.go b/models/workflow.go index 5a39887..b883a24 100644 --- a/models/workflow.go +++ b/models/workflow.go @@ -564,9 +564,9 @@ func FindSliceInSlice(slice1 []string, slice2 []string) (int, int, bool) { return -1, -1, false } -func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, err error, issues []error) { +func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (returned_wf *Workflow, err error, issues []error) { - ret = &Workflow{} + returned_wf = &Workflow{} // When we will iterate over the full array of cells, we first will register the resources // and after the linkage between them @@ -574,6 +574,18 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er return xmlmodel.Root.MxCell[i].RID != nil }) + // For each cell of the xml graph, + // in the case cell has a rID retrieve its rType from the value of rID of the componant in the worfklow + // retrieve the componant's type + // create an object from the rType + // update the existing workflow with the new componant + // or by defautlt : the cell represents an arrow + // if the source or the target of the arrow is a datacenter + // define which end of the arrow is the DC + // if the other other end of the arrow is a computing component + // create a computing object + // attach the DC to it + // update the workflow with the object : create the list of this type of component or update the list with the id of the component with the object for _, cell := range xmlmodel.Root.MxCell { switch { @@ -595,10 +607,11 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er nil } - resObj := ret.CreateResourceObject(rType) + resObj := returned_wf.CreateResourceObject(rType) resObj.setReference(rIDObj) - ret.UpdateObj(resObj, cell.ID) + returned_wf.UpdateObj(resObj, cell.ID) + case cell.ID == "0" || cell.ID == "1": // ID 0 and 1 are special cases of mxeditor continue @@ -606,8 +619,8 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er default: // Not root nor resource. Should be only links - sourceObj := ret.GetResource(cell.Source) - targetObj := ret.GetResource(cell.Target) + sourceObj := returned_wf.GetResource(cell.Source) + targetObj := returned_wf.GetResource(cell.Target) if sourceObj == nil || targetObj == nil { if sourceObj == nil && targetObj == nil { @@ -633,18 +646,18 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er datacenterLinked = cell.Source } - switch ret.GetResource(datacenterLinked).getRtype() { + switch returned_wf.GetResource(datacenterLinked).getRtype() { case rtype.COMPUTING: - computingObj := ret.GetResource(datacenterLinked).(*ComputingObject) + computingObj := returned_wf.GetResource(datacenterLinked).(*ComputingObject) // We should always get a ID because we already registered resources and discarded which doesn't correspond to existent models computingObj.DataCenterID = *datacenter - ret.UpdateObj(computingObj, *datacenterLinked) + returned_wf.UpdateObj(computingObj, *datacenterLinked) } } else { targetObj.addLink(INPUT, *cell.Source) - ret.UpdateObj(targetObj, *cell.Target) // save back + returned_wf.UpdateObj(targetObj, *cell.Target) // save back // If we have a relationship of: // Source ----> Target @@ -653,7 +666,7 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er // But we also must make sure that the Target will be in the OUTPUTs of the Source sourceObj.addLink(OUTPUT, *cell.Target) - ret.UpdateObj(sourceObj, *cell.Source) + returned_wf.UpdateObj(sourceObj, *cell.Source) } } @@ -663,7 +676,9 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er dataslist := make(map[string]bool) // datalist := make(map[string]bool) - for _, comp := range ret.Computing { + + // Test wether the computing componants are linked with a DC + for _, comp := range returned_wf.Computing { if comp.DataCenterID == "" { issues = append(issues, errors.New("Computing "+*comp.getName()+" without a Datacenter")) } else { @@ -673,14 +688,14 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er } for _, dcin := range comp.Inputs { - switch ret.GetResource(&dcin).getRtype() { + switch returned_wf.GetResource(&dcin).getRtype() { case rtype.DATA: dataslist[dcin] = true } } for _, dcout := range comp.Outputs { - switch ret.GetResource(&dcout).getRtype() { + switch returned_wf.GetResource(&dcout).getRtype() { case rtype.DATA: dataslist[dcout] = true } @@ -688,23 +703,23 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er } - for _, va := range ret.Storage { - if va.Inputs == nil && va.Outputs == nil { - issues = append(issues, errors.New("Storage "+*va.getName()+" without compatible inputs and outputs")) + for _, storage_component := range returned_wf.Storage { + if storage_component.Inputs == nil && storage_component.Outputs == nil { + issues = append(issues, errors.New("Storage "+*storage_component.getName()+" without compatible inputs and outputs")) } } - for dcID, va := range ret.Datacenter { + for dcID, dc_component := range returned_wf.Datacenter { // if rID doesn't exist in the list, it means that it's not used if _, ok := dcslist[dcID]; !ok { - issues = append(issues, errors.New("DC "+*va.getName()+" not atached to any Computing")) + issues = append(issues, errors.New("DC "+*dc_component.getName()+" not atached to any Computing")) } } - for dcID, va := range ret.Data { + for dcID, data_component := range returned_wf.Data { // if rID doesn't exist in the list, it means that it's not used if _, ok := dataslist[dcID]; !ok { - issues = append(issues, errors.New("Data "+*va.getName()+" not atached to any Computing")) + issues = append(issues, errors.New("Data "+*data_component.getName()+" not atached to any Computing")) } } @@ -722,7 +737,7 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er // inputs AND Comp2 inputs with Comp1 outputs, since we are // iterating over all existent Computing models in the Graph - for _, comp := range ret.Computing { + for _, comp := range returned_wf.Computing { compModel, err2 := comp.getModel() if err = err2; err != nil { @@ -744,7 +759,7 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er //TODO: We should allow heterogenous inputs? for _, objIn := range comp.Inputs { - resIn := ret.GetResource(&objIn) + resIn := returned_wf.GetResource(&objIn) resInType := resIn.getRtype() switch resInType { case rtype.DATA: @@ -781,7 +796,7 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er //TODO: We should allow heterogenous outputs? for _, objOut := range comp.Outputs { - resOut := ret.GetResource(&objOut) + resOut := returned_wf.GetResource(&objOut) resOutType := resOut.getRtype() switch resOutType { case rtype.COMPUTING: From 8a03ad205df1294dc3a7aa57b07dc6a5552aaa93 Mon Sep 17 00:00:00 2001 From: pb Date: Fri, 22 Mar 2024 11:27:25 +0100 Subject: [PATCH 4/4] added user input handling methods --- models/computing.go | 20 ++++++++++++++++++++ models/storage.go | 18 +++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/models/computing.go b/models/computing.go index d3c58e1..846f06d 100644 --- a/models/computing.go +++ b/models/computing.go @@ -1,6 +1,9 @@ package models import ( + "fmt" + "strings" + "cloud.o-forge.io/core/oc-catalog/models/rtype" "cloud.o-forge.io/core/oc-catalog/services" "github.com/beego/beego/v2/core/logs" @@ -170,3 +173,20 @@ func GetMultipleComputing(IDs []string) (object *[]ComputingModel, err error) { func PostOneComputing(obj ComputingNEWModel) (ID string, err error) { return postOneResource(obj, rtype.COMPUTING) } + +func (obj ComputingModel) AddUserInput(inputs map[string]interface{} ){ + // So far only a few input to handle so a switch with a case for each type of attribute + // is enough, to prevent too much complexity + for key, value := range inputs { + switch strings.ToLower(key) { + case "command": + obj.Command = value.(string) + case "arguments": + obj.Arguments = value.([]string) + case "env" : + obj.Environment = value.([]string) + default: + logs.Alert(fmt.Printf("%s is not an attribute of storage componants", key)) + } + } +} \ No newline at end of file diff --git a/models/storage.go b/models/storage.go index 397cd82..245f34f 100644 --- a/models/storage.go +++ b/models/storage.go @@ -1,6 +1,9 @@ package models import ( + "fmt" + "strings" + "cloud.o-forge.io/core/oc-catalog/models/rtype" "cloud.o-forge.io/core/oc-catalog/services" "github.com/beego/beego/v2/core/logs" @@ -12,7 +15,7 @@ type StorageNEWModel struct { Description string `json:"description" required:"true"` ShortDescription string `json:"short_description" required:"true" validate:"required"` Logo string `json:"logo" required:"true" validate:"required"` - // Type string `json:"type,omitempty" required:"true"` + Type string `json:"type,omitempty" required:"true"` DCacronym string `json:"DCacronym" required:"true" description:"Unique ID of the DC where it is the storage"` URL string `json:"URL"` @@ -137,3 +140,16 @@ func GetMultipleStorage(IDs []string) (object *[]StorageModel, err error) { return object, err } + +func (obj StorageModel) AddUserInput(inputs map[string]interface{} ){ + // So far only a few input to handle so a switch with a case for each type of attribute + // is enough, to prevent too much complexity + for key, value := range inputs { + switch strings.ToLower(key) { + case "URL": + obj.URL = value.(string) + default: + logs.Alert(fmt.Printf("%s is not an attribute of storage componants", key)) + } + } +} \ No newline at end of file