commit 9cd9e6fc206e16c6f7b2ba4f66210c93c5acadda Author: Fauvet Matthis Date: Tue Oct 15 01:22:20 2024 +0200 Pushed diagrams diff --git a/model_set_stats_ping.mdj b/model_set_stats_ping.mdj new file mode 100644 index 0000000..9122171 --- /dev/null +++ b/model_set_stats_ping.mdj @@ -0,0 +1,2590 @@ +{ + "_type": "Project", + "_id": "AAAAAAFF+h6SjaM2Hec=", + "name": "Untitled", + "ownedElements": [ + { + "_type": "UMLModel", + "_id": "AAAAAAFF+qBWK6M3Z8Y=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model", + "ownedElements": [ + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAFF+qBtyKM79qY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Main", + "defaultDiagram": true + } + ] + }, + { + "_type": "UMLModel", + "_id": "AAAAAAGSjTYFFRj55gE=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model1", + "ownedElements": [ + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAGSjTYFFRj6keM=", + "_parent": { + "$ref": "AAAAAAGSjTYFFRj55gE=" + }, + "name": "ClassDiagram1" + } + ] + }, + { + "_type": "UMLModel", + "_id": "AAAAAAGSjTYrFxj+gP4=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model2", + "ownedElements": [ + { + "_type": "UMLDeploymentDiagram", + "_id": "AAAAAAGSjTYrFxj/iEQ=", + "_parent": { + "$ref": "AAAAAAGSjTYrFxj+gP4=" + }, + "name": "DeploymentDiagram1", + "ownedElements": [ + { + "_type": "FCFlowchart", + "_id": "AAAAAAGSjTa+rRkDXR0=", + "_parent": { + "$ref": "AAAAAAGSjTYrFxj/iEQ=" + }, + "name": "Flowchart1", + "ownedElements": [ + { + "_type": "FCFlowchartDiagram", + "_id": "AAAAAAGSjTa+rRkEKG0=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "FlowchartDiagram1", + "ownedViews": [ + { + "_type": "FCTerminatorView", + "_id": "AAAAAAGSjTcBuBkKNzc=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTcBuBkIfAw=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjTcBuBkLrts=", + "_parent": { + "$ref": "AAAAAAGSjTcBuBkKNzc=" + }, + "font": "Arial;13;0", + "left": 338, + "top": 130, + "width": 76, + "height": 13, + "text": "Start", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 328, + "top": 120, + "width": 96, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjTcBuBkLrts=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjTczVxkWlhU=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTczVxkU22o=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjTczVxkXmAE=", + "_parent": { + "$ref": "AAAAAAGSjTczVxkWlhU=" + }, + "font": "Arial;13;0", + "left": 328.542236328125, + "top": 213, + "width": 97.08447265625, + "height": 26, + "text": "IF fd == NULL", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 280, + "top": 200, + "width": 194.1689453125, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjTczVxkXmAE=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjTd0LRkjgUM=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTd0LRkhd6E=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjTd0LRkk3jY=", + "_parent": { + "$ref": "AAAAAAGSjTd0LRkjgUM=" + }, + "model": { + "$ref": "AAAAAAGSjTd0LRkhd6E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 390, + "top": 169, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjTd0LRkjgUM=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjTczVxkWlhU=" + }, + "tail": { + "$ref": "AAAAAAGSjTcBuBkKNzc=" + }, + "lineStyle": 2, + "points": "376:153;376:200", + "nameLabel": { + "$ref": "AAAAAAGSjTd0LRkk3jY=" + } + }, + { + "_type": "FCTerminatorView", + "_id": "AAAAAAGSjTfTpRlEBx8=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTfTpRlCvWw=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjTfTpRlFx+Q=", + "_parent": { + "$ref": "AAAAAAGSjTfTpRlEBx8=" + }, + "font": "Arial;13;0", + "left": 210, + "top": 346, + "width": 76.63720703125, + "height": 13, + "text": "return", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 200, + "top": 336, + "width": 96.63720703125, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjTfTpRlFx+Q=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjTflZhlOBR4=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTflZRlMxVA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjTflZhlP5i4=", + "_parent": { + "$ref": "AAAAAAGSjTflZhlOBR4=" + }, + "model": { + "$ref": "AAAAAAGSjTflZRlMxVA=" + }, + "font": "Arial;13;0", + "left": 263, + "top": 232, + "width": 20.22998046875, + "height": 13, + "alpha": 1.0768549398542977, + "distance": 29.5296461204668, + "hostEdge": { + "$ref": "AAAAAAGSjTflZhlOBR4=" + }, + "edgePosition": 1, + "text": "yes" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjTfTpRlEBx8=" + }, + "tail": { + "$ref": "AAAAAAGSjTczVxkWlhU=" + }, + "lineStyle": 2, + "points": "280:224;248:224;248:336", + "nameLabel": { + "$ref": "AAAAAAGSjTflZhlP5i4=" + } + }, + { + "_type": "FCTerminatorView", + "_id": "AAAAAAGSjTkF6Bl8hic=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTkF6Bl6m3A=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjTkF6Bl9PCY=", + "_parent": { + "$ref": "AAAAAAGSjTkF6Bl8hic=" + }, + "font": "Arial;13;0", + "left": 650, + "top": 130, + "width": 68.63720703125, + "height": 13, + "text": "Start", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 640, + "top": 120, + "width": 88.63720703125, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjTkF6Bl9PCY=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjTkklBmGP3g=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTkkkxmE+Kw=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjTkklBmHVMI=", + "_parent": { + "$ref": "AAAAAAGSjTkklBmGP3g=" + }, + "model": { + "$ref": "AAAAAAGSjTkkkxmE+Kw=" + }, + "font": "Arial;13;0", + "left": 472, + "top": 232, + "width": 14.4599609375, + "height": 13, + "alpha": -1.6899474827541936, + "distance": 143.01398533010678, + "hostEdge": { + "$ref": "AAAAAAGSjTkklBmGP3g=" + }, + "edgePosition": 1, + "text": "no" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjTkF6Bl8hic=" + }, + "tail": { + "$ref": "AAAAAAGSjTczVxkWlhU=" + }, + "lineStyle": 2, + "points": "474:224;496:224;496:96;680:96;680:120", + "nameLabel": { + "$ref": "AAAAAAGSjTkklBmHVMI=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjToRxxmXOps=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjToRxxmVato=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjToRxxmYlKQ=", + "_parent": { + "$ref": "AAAAAAGSjToRxxmXOps=" + }, + "font": "Arial;13;0", + "left": 622, + "top": 201.5, + "width": 124, + "height": 35, + "text": "WHILE getline() != -1", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 560, + "top": 184, + "width": 248, + "height": 70, + "nameLabel": { + "$ref": "AAAAAAGSjToRxxmYlKQ=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjTsRiBm6LTU=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTsRiBm4KQY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjTsRiBm7Uog=", + "_parent": { + "$ref": "AAAAAAGSjTsRiBm6LTU=" + }, + "model": { + "$ref": "AAAAAAGSjTsRiBm4KQY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 698, + "top": 161, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjTsRiBm6LTU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjToRxxmXOps=" + }, + "tail": { + "$ref": "AAAAAAGSjTkF6Bl8hic=" + }, + "lineStyle": 2, + "points": "684:153;684:184", + "nameLabel": { + "$ref": "AAAAAAGSjTsRiBm7Uog=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjTtONRnDM3I=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTtONRnBET8=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjTtONRnEp6g=", + "_parent": { + "$ref": "AAAAAAGSjTtONRnDM3I=" + }, + "font": "Arial;13;0", + "left": 642, + "top": 309, + "width": 84, + "height": 26, + "text": "strcmp() == 0", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 600, + "top": 296, + "width": 168, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjTtONRnEp6g=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjTvE7RnZT9Y=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTvE7BnX3tU=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjTvE7RnaJPo=", + "_parent": { + "$ref": "AAAAAAGSjTvE7RnZT9Y=" + }, + "model": { + "$ref": "AAAAAAGSjTvE7BnX3tU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 697, + "top": 268, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjTvE7RnZT9Y=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjTtONRnDM3I=" + }, + "tail": { + "$ref": "AAAAAAGSjToRxxmXOps=" + }, + "lineStyle": 2, + "points": "683:254;683:296", + "nameLabel": { + "$ref": "AAAAAAGSjTvE7RnaJPo=" + } + }, + { + "_type": "FCProcessView", + "_id": "AAAAAAGSjTwVRRnnN6U=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTwVRRnlvNU=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjTwVRRnohYI=", + "_parent": { + "$ref": "AAAAAAGSjTwVRRnnN6U=" + }, + "font": "Arial;13;0", + "left": 530, + "top": 394, + "width": 73.708984375, + "height": 13, + "text": "(*nb_loss)++", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 520, + "top": 384, + "width": 93.708984375, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjTwVRRnohYI=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjTySvhnzP30=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjTySvhnx0Sw=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjTySvxn0mM4=", + "_parent": { + "$ref": "AAAAAAGSjTySvhnzP30=" + }, + "model": { + "$ref": "AAAAAAGSjTySvhnx0Sw=" + }, + "font": "Arial;13;0", + "left": 583, + "top": 328, + "width": 20.22998046875, + "height": 13, + "alpha": 1.1801892303974797, + "distance": 36.76955262170047, + "hostEdge": { + "$ref": "AAAAAAGSjTySvhnzP30=" + }, + "edgePosition": 1, + "text": "yes" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjTwVRRnnN6U=" + }, + "tail": { + "$ref": "AAAAAAGSjTtONRnDM3I=" + }, + "lineStyle": 2, + "points": "600:320;560:320;560:384", + "nameLabel": { + "$ref": "AAAAAAGSjTySvxn0mM4=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjT2JWRoDRYM=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjT2JWRoBw48=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjT2JWRoEif4=", + "_parent": { + "$ref": "AAAAAAGSjT2JWRoDRYM=" + }, + "font": "Arial;13;0", + "left": 646.542236328125, + "top": 469, + "width": 77.08447265625, + "height": 26, + "text": "getline() != -1", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 608, + "top": 456, + "width": 154.1689453125, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjT2JWRoEif4=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjT3YmBodrPE=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjT3YmBob5sY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjT3YmBoeAU8=", + "_parent": { + "$ref": "AAAAAAGSjT3YmBodrPE=" + }, + "model": { + "$ref": "AAAAAAGSjT3YmBob5sY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 694, + "top": 393, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjT3YmBodrPE=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjT2JWRoDRYM=" + }, + "tail": { + "$ref": "AAAAAAGSjTwVRRnnN6U=" + }, + "lineStyle": 2, + "points": "614:400;680:400;680:456", + "nameLabel": { + "$ref": "AAAAAAGSjT3YmBoeAU8=" + } + }, + { + "_type": "FCTerminatorView", + "_id": "AAAAAAGSjT5WixorH1I=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjT5Wihopz8Q=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjT5WixosPBA=", + "_parent": { + "$ref": "AAAAAAGSjT5WixorH1I=" + }, + "font": "Arial;13;0", + "left": 986, + "top": 138, + "width": 68.63720703125, + "height": 13, + "text": "Start", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 976, + "top": 128, + "width": 88.63720703125, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjT5WixosPBA=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjT7rnxo2/8c=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjT7rnxo0phc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjT7roBo3Pz0=", + "_parent": { + "$ref": "AAAAAAGSjT7rnxo2/8c=" + }, + "model": { + "$ref": "AAAAAAGSjT7rnxo0phc=" + }, + "font": "Arial;13;0", + "left": 589, + "top": 487, + "width": 20.22998046875, + "height": 13, + "alpha": -1.3100029938524034, + "distance": 337.40924705763473, + "hostEdge": { + "$ref": "AAAAAAGSjT7rnxo2/8c=" + }, + "edgePosition": 1, + "text": "yes" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjToRxxmXOps=" + }, + "tail": { + "$ref": "AAAAAAGSjT2JWRoDRYM=" + }, + "lineStyle": 2, + "points": "608:480;512:480;512:168;680:168;680:184", + "nameLabel": { + "$ref": "AAAAAAGSjT7roBo3Pz0=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjT/RsxpMZrE=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjT/RshpKwDo=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjT/RsxpNQh4=", + "_parent": { + "$ref": "AAAAAAGSjT/RsxpMZrE=" + }, + "model": { + "$ref": "AAAAAAGSjT/RshpKwDo=" + }, + "font": "Arial;13;0", + "left": 760, + "top": 328, + "width": 14.4599609375, + "height": 13, + "alpha": -4.130141571750232, + "distance": 192.7615106809448, + "hostEdge": { + "$ref": "AAAAAAGSjT/RsxpMZrE=" + }, + "edgePosition": 1, + "text": "no" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjT5WixorH1I=" + }, + "tail": { + "$ref": "AAAAAAGSjTtONRnDM3I=" + }, + "lineStyle": 2, + "points": "768:320;928:320;928:136;976:136", + "nameLabel": { + "$ref": "AAAAAAGSjT/RsxpNQh4=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjUB5Sxpnx+w=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUB5SxplzmI=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjUB5SxpolC4=", + "_parent": { + "$ref": "AAAAAAGSjUB5Sxpnx+w=" + }, + "font": "Arial;13;0", + "left": 748.542236328125, + "top": 565, + "width": 89.08447265625, + "height": 26, + "text": "IF *nb_ping > 0", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 704, + "top": 552, + "width": 178.1689453125, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjUB5SxpolC4=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUEw6xpz4Qc=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUEw6hpxfNk=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUEw6xp0vZU=", + "_parent": { + "$ref": "AAAAAAGSjUEw6xpz4Qc=" + }, + "model": { + "$ref": "AAAAAAGSjUEw6hpxfNk=" + }, + "font": "Arial;13;0", + "left": 751, + "top": 487, + "width": 14.4599609375, + "height": 13, + "alpha": -1.1695675577294922, + "distance": 35.84689665786984, + "hostEdge": { + "$ref": "AAAAAAGSjUEw6xpz4Qc=" + }, + "edgePosition": 1, + "text": "no" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUB5Sxpnx+w=" + }, + "tail": { + "$ref": "AAAAAAGSjT2JWRoDRYM=" + }, + "lineStyle": 2, + "points": "762:480;792:480;792:552", + "nameLabel": { + "$ref": "AAAAAAGSjUEw6xp0vZU=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjUF0khp+eis=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUF0kRp8vxM=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjUF0khp/SRI=", + "_parent": { + "$ref": "AAAAAAGSjUF0khp+eis=" + }, + "font": "Arial;13;0", + "left": 858, + "top": 717, + "width": 116, + "height": 26, + "text": "read_line != NULL", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 800, + "top": 704, + "width": 232, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjUF0khp/SRI=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUGxqRqLKRk=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUGxqRqJvVQ=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUGxqRqM8OE=", + "_parent": { + "$ref": "AAAAAAGSjUGxqRqLKRk=" + }, + "model": { + "$ref": "AAAAAAGSjUGxqRqJvVQ=" + }, + "font": "Arial;13;0", + "left": 888, + "top": 584, + "width": 14.4599609375, + "height": 13, + "alpha": -0.8818717280451402, + "distance": 22.02271554554524, + "hostEdge": { + "$ref": "AAAAAAGSjUGxqRqLKRk=" + }, + "edgePosition": 1, + "text": "no" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUF0khp+eis=" + }, + "tail": { + "$ref": "AAAAAAGSjUB5Sxpnx+w=" + }, + "lineStyle": 2, + "points": "882:576;912:576;912:704", + "nameLabel": { + "$ref": "AAAAAAGSjUGxqRqM8OE=" + } + }, + { + "_type": "FCProcessView", + "_id": "AAAAAAGSjUKX7xqZnGI=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUKX7xqXLRE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjUKX7xqaoR4=", + "_parent": { + "$ref": "AAAAAAGSjUKX7xqZnGI=" + }, + "font": "Arial;13;0", + "left": 666, + "top": 642, + "width": 54.18994140625, + "height": 13, + "text": "action", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 656, + "top": 632, + "width": 74.18994140625, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjUKX7xqaoR4=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUK/oRqjLNQ=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUK/oBqhrSI=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUK/oRqkGfs=", + "_parent": { + "$ref": "AAAAAAGSjUK/oRqjLNQ=" + }, + "model": { + "$ref": "AAAAAAGSjUK/oBqhrSI=" + }, + "font": "Arial;13;0", + "left": 696, + "top": 583, + "width": 20.22998046875, + "height": 13, + "alpha": 0.9097532486034572, + "distance": 22.80350850198276, + "hostEdge": { + "$ref": "AAAAAAGSjUK/oRqjLNQ=" + }, + "edgePosition": 1, + "text": "yes" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUKX7xqZnGI=" + }, + "tail": { + "$ref": "AAAAAAGSjUB5Sxpnx+w=" + }, + "lineStyle": 2, + "points": "704:576;688:576;688:632", + "nameLabel": { + "$ref": "AAAAAAGSjUK/oRqkGfs=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUSwwhqxmQ0=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUSwwhqvNYs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUSwwhqy1UI=", + "_parent": { + "$ref": "AAAAAAGSjUSwwhqxmQ0=" + }, + "model": { + "$ref": "AAAAAAGSjUSwwhqvNYs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 800, + "top": 667, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjUSwwhqxmQ0=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUF0khp+eis=" + }, + "tail": { + "$ref": "AAAAAAGSjUKX7xqZnGI=" + }, + "lineStyle": 2, + "points": "688:665;688:688;912:688;912:704", + "nameLabel": { + "$ref": "AAAAAAGSjUSwwhqy1UI=" + } + }, + { + "_type": "FCProcessView", + "_id": "AAAAAAGSjUaJ7Bq/NOY=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUaJ6xq98d0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjUaJ7BrAAQ4=", + "_parent": { + "$ref": "AAAAAAGSjUaJ7Bq/NOY=" + }, + "font": "Arial;13;0", + "left": 738, + "top": 802, + "width": 54.18994140625, + "height": 13, + "text": "Process1", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 728, + "top": 792, + "width": 74.18994140625, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjUaJ7BrAAQ4=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUb1XBrNo6A=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUb1XBrLT6I=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUb1XBrOfxA=", + "_parent": { + "$ref": "AAAAAAGSjUb1XBrNo6A=" + }, + "model": { + "$ref": "AAAAAAGSjUb1XBrLT6I=" + }, + "font": "Arial;13;0", + "left": 784, + "top": 743, + "width": 20.22998046875, + "height": 13, + "alpha": 0.8685394286910193, + "distance": 34.058772731852805, + "hostEdge": { + "$ref": "AAAAAAGSjUb1XBrNo6A=" + }, + "edgePosition": 1, + "text": "yes" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUaJ7Bq/NOY=" + }, + "tail": { + "$ref": "AAAAAAGSjUF0khp+eis=" + }, + "lineStyle": 2, + "points": "800:728;768:728;768:792", + "nameLabel": { + "$ref": "AAAAAAGSjUb1XBrOfxA=" + } + }, + { + "_type": "FCTerminatorView", + "_id": "AAAAAAGSjUdoGxrklLs=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUdoGxrifi0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjUdoGxrlwyc=", + "_parent": { + "$ref": "AAAAAAGSjUdoGxrklLs=" + }, + "font": "Arial;13;0", + "left": 1010, + "top": 882, + "width": 68.63720703125, + "height": 13, + "text": "return", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 1000, + "top": 872, + "width": 88.63720703125, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjUdoGxrlwyc=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUeZdRryGfw=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUeZdRrwnm4=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUeZdRrz5U4=", + "_parent": { + "$ref": "AAAAAAGSjUeZdRryGfw=" + }, + "model": { + "$ref": "AAAAAAGSjUeZdRrwnm4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1063, + "top": 721, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjUeZdRryGfw=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUdoGxrklLs=" + }, + "tail": { + "$ref": "AAAAAAGSjUF0khp+eis=" + }, + "lineStyle": 2, + "points": "1032:728;1048:728;1048:872", + "nameLabel": { + "$ref": "AAAAAAGSjUeZdRrz5U4=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUfibxsBmoM=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUfibhr/j6Q=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUfibxsC8VE=", + "_parent": { + "$ref": "AAAAAAGSjUfibxsBmoM=" + }, + "model": { + "$ref": "AAAAAAGSjUfibhr/j6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 908, + "top": 819, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjUfibxsBmoM=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUdoGxrklLs=" + }, + "tail": { + "$ref": "AAAAAAGSjUaJ7Bq/NOY=" + }, + "lineStyle": 2, + "points": "768:825;768:840;1048:840;1048:872", + "nameLabel": { + "$ref": "AAAAAAGSjUfibxsC8VE=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjUhJuRsTtJ4=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUhJuRsR6hk=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjUhJuhsU4JY=", + "_parent": { + "$ref": "AAAAAAGSjUhJuRsTtJ4=" + }, + "font": "Arial;13;0", + "left": 992.542236328125, + "top": 229, + "width": 81.08447265625, + "height": 26, + "text": "IF ping >= 0.1", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 952, + "top": 216, + "width": 162.1689453125, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjUhJuhsU4JY=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUidrBsgj/M=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUidrBseEDw=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUidrBsh+2M=", + "_parent": { + "$ref": "AAAAAAGSjUidrBsgj/M=" + }, + "model": { + "$ref": "AAAAAAGSjUidrBseEDw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1033, + "top": 181, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjUidrBsgj/M=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUhJuRsTtJ4=" + }, + "tail": { + "$ref": "AAAAAAGSjT5WixorH1I=" + }, + "lineStyle": 2, + "points": "1019:161;1019:216", + "nameLabel": { + "$ref": "AAAAAAGSjUidrBsh+2M=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUjmNhsrzX4=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUjmNRspeaY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUjmNhssYNk=", + "_parent": { + "$ref": "AAAAAAGSjUjmNhsrzX4=" + }, + "model": { + "$ref": "AAAAAAGSjUjmNRspeaY=" + }, + "font": "Arial;13;0", + "left": 952, + "top": 184, + "width": 14.4599609375, + "height": 13, + "alpha": 4.5893575588484605, + "distance": 187.41664813991312, + "hostEdge": { + "$ref": "AAAAAAGSjUjmNhsrzX4=" + }, + "edgePosition": 1, + "text": "no" + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjT2JWRoDRYM=" + }, + "tail": { + "$ref": "AAAAAAGSjUhJuRsTtJ4=" + }, + "lineStyle": 2, + "points": "952:240;936:240;936:376;680:376;680:456", + "nameLabel": { + "$ref": "AAAAAAGSjUjmNhssYNk=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjUxHUhs+hVk=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUxHUhs8blg=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjUxHUhs/el8=", + "_parent": { + "$ref": "AAAAAAGSjUxHUhs+hVk=" + }, + "font": "Arial;13;0", + "left": 1068, + "top": 317, + "width": 88, + "height": 26, + "text": "IF ping > *max", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 1024, + "top": 304, + "width": 176, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjUxHUhs/el8=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjUzeihtMUcY=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjUzeiRtK46A=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjUzeihtNpz8=", + "_parent": { + "$ref": "AAAAAAGSjUzeihtMUcY=" + }, + "model": { + "$ref": "AAAAAAGSjUzeiRtK46A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1150, + "top": 233, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjUzeihtMUcY=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjUxHUhs+hVk=" + }, + "tail": { + "$ref": "AAAAAAGSjUhJuRsTtJ4=" + }, + "lineStyle": 2, + "points": "1114:240;1136:240;1136:304", + "nameLabel": { + "$ref": "AAAAAAGSjUzeihtNpz8=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjU6VFxtZqGA=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjU6VFxtXs84=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjU6VFxtaeBo=", + "_parent": { + "$ref": "AAAAAAGSjU6VFxtZqGA=" + }, + "font": "Arial;13;0", + "left": 1170.542236328125, + "top": 485, + "width": 85.08447265625, + "height": 26, + "text": "IF ping < *min", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 1128, + "top": 472, + "width": 170.1689453125, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjU6VFxtaeBo=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjU7TnRtk7o0=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjU7TnRtiC4s=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjU7TnRtlepw=", + "_parent": { + "$ref": "AAAAAAGSjU7TnRtk7o0=" + }, + "model": { + "$ref": "AAAAAAGSjU7TnRtiC4s=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1231, + "top": 323, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjU7TnRtk7o0=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjU6VFxtZqGA=" + }, + "tail": { + "$ref": "AAAAAAGSjUxHUhs+hVk=" + }, + "lineStyle": 2, + "points": "1200:330;1216:330;1216:472", + "nameLabel": { + "$ref": "AAAAAAGSjU7TnRtlepw=" + } + }, + { + "_type": "FCDecisionView", + "_id": "AAAAAAGSjU9DNxtygEg=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjU9DNhtwzgA=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjU9DNxtzQxI=", + "_parent": { + "$ref": "AAAAAAGSjU9DNxtygEg=" + }, + "font": "Arial;13;0", + "left": 1268.542236328125, + "top": 613, + "width": 89.08447265625, + "height": 26, + "text": "IF ping > 100.0", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 1224, + "top": 600, + "width": 178.1689453125, + "height": 52, + "nameLabel": { + "$ref": "AAAAAAGSjU9DNxtzQxI=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjU/QmRt9lXw=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjU/QmRt7GI0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjU/QmRt+LKs=", + "_parent": { + "$ref": "AAAAAAGSjU/QmRt9lXw=" + }, + "model": { + "$ref": "AAAAAAGSjU/QmRt7GI0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1327, + "top": 489, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjU/QmRt9lXw=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjU9DNxtygEg=" + }, + "tail": { + "$ref": "AAAAAAGSjU6VFxtZqGA=" + }, + "lineStyle": 2, + "points": "1298:496;1312:496;1312:600", + "nameLabel": { + "$ref": "AAAAAAGSjU/QmRt+LKs=" + } + }, + { + "_type": "FCProcessView", + "_id": "AAAAAAGSjU/tfxuIJ/U=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjU/tfxuG/dM=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjU/tfxuJ6qY=", + "_parent": { + "$ref": "AAAAAAGSjU/tfxuIJ/U=" + }, + "font": "Arial;13;0", + "left": 978, + "top": 394, + "width": 54.18994140625, + "height": 13, + "text": "Process2", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 968, + "top": 384, + "width": 74.18994140625, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjU/tfxuJ6qY=" + } + }, + { + "_type": "FCProcessView", + "_id": "AAAAAAGSjU/13BuQIg4=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjU/13BuOry0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjU/13BuRemM=", + "_parent": { + "$ref": "AAAAAAGSjU/13BuQIg4=" + }, + "font": "Arial;13;0", + "left": 1082, + "top": 546, + "width": 54.18994140625, + "height": 13, + "text": "Process3", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 1072, + "top": 536, + "width": 74.18994140625, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjU/13BuRemM=" + } + }, + { + "_type": "FCProcessView", + "_id": "AAAAAAGSjVAHRxuZ6ss=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjVAHRhuXT6E=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGSjVAHRxua8tY=", + "_parent": { + "$ref": "AAAAAAGSjVAHRxuZ6ss=" + }, + "font": "Arial;13;0", + "left": 1290, + "top": 690, + "width": 54.18994140625, + "height": 13, + "text": "Process4", + "wordWrap": true + } + ], + "font": "Arial;13;0", + "left": 1280, + "top": 680, + "width": 74.18994140625, + "height": 33, + "nameLabel": { + "$ref": "AAAAAAGSjVAHRxua8tY=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjVBh2Bu/J/c=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjVBh2Bu9Vv0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjVBh2BvAp4U=", + "_parent": { + "$ref": "AAAAAAGSjVBh2Bu/J/c=" + }, + "model": { + "$ref": "AAAAAAGSjVBh2Bu9Vv0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1022, + "top": 321, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjVBh2Bu/J/c=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjU/tfxuIJ/U=" + }, + "tail": { + "$ref": "AAAAAAGSjUxHUhs+hVk=" + }, + "lineStyle": 2, + "points": "1024:328;1008:328;1008:384", + "nameLabel": { + "$ref": "AAAAAAGSjVBh2BvAp4U=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjVB7hhvKoW0=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjVB7hhvImhs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjVB7hhvLFyI=", + "_parent": { + "$ref": "AAAAAAGSjVB7hhvKoW0=" + }, + "model": { + "$ref": "AAAAAAGSjVB7hhvImhs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1112, + "top": 435, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjVB7hhvKoW0=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjU6VFxtZqGA=" + }, + "tail": { + "$ref": "AAAAAAGSjU/tfxuIJ/U=" + }, + "lineStyle": 2, + "points": "1008:417;1008:456;1216:456;1216:472", + "nameLabel": { + "$ref": "AAAAAAGSjVB7hhvLFyI=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjVDKHxvde1k=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjVDKHxvbVHY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjVDKHxve/oE=", + "_parent": { + "$ref": "AAAAAAGSjVDKHxvde1k=" + }, + "model": { + "$ref": "AAAAAAGSjVDKHxvbVHY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1126, + "top": 489, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjVDKHxvde1k=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjU/13BuQIg4=" + }, + "tail": { + "$ref": "AAAAAAGSjU6VFxtZqGA=" + }, + "lineStyle": 2, + "points": "1128:496;1112:496;1112:536", + "nameLabel": { + "$ref": "AAAAAAGSjVDKHxve/oE=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjVEVBhvvH6s=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjVEVBhvtZj0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjVEVBhvwirw=", + "_parent": { + "$ref": "AAAAAAGSjVEVBhvvH6s=" + }, + "model": { + "$ref": "AAAAAAGSjVEVBhvtZj0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1212, + "top": 563, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjVEVBhvvH6s=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjU9DNxtygEg=" + }, + "tail": { + "$ref": "AAAAAAGSjU/13BuQIg4=" + }, + "lineStyle": 2, + "points": "1112:569;1112:584;1312:584;1312:600", + "nameLabel": { + "$ref": "AAAAAAGSjVEVBhvwirw=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjVE8QBv7bxU=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjVE8QBv5CrI=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjVE8QBv8zxs=", + "_parent": { + "$ref": "AAAAAAGSjVE8QBv7bxU=" + }, + "model": { + "$ref": "AAAAAAGSjVE8QBv5CrI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1328, + "top": 659, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjVE8QBv7bxU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjVAHRxuZ6ss=" + }, + "tail": { + "$ref": "AAAAAAGSjU9DNxtygEg=" + }, + "lineStyle": 2, + "points": "1314:652;1314:680", + "nameLabel": { + "$ref": "AAAAAAGSjVE8QBv8zxs=" + } + }, + { + "_type": "FCFlowView", + "_id": "AAAAAAGSjVFJBhwEvXM=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkEKG0=" + }, + "model": { + "$ref": "AAAAAAGSjVFJBhwCMqY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGSjVFJBhwFE/E=", + "_parent": { + "$ref": "AAAAAAGSjVFJBhwEvXM=" + }, + "model": { + "$ref": "AAAAAAGSjVFJBhwCMqY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1041, + "top": 577, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGSjVFJBhwEvXM=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGSjT2JWRoDRYM=" + }, + "tail": { + "$ref": "AAAAAAGSjVAHRxuZ6ss=" + }, + "lineStyle": 2, + "points": "1325:713;1325:720;1056:720;1056:448;680:448;680:456", + "nameLabel": { + "$ref": "AAAAAAGSjVFJBhwFE/E=" + } + } + ] + }, + { + "_type": "FCTerminator", + "_id": "AAAAAAGSjTcBuBkIfAw=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "Start", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjTd0LRkhd6E=", + "_parent": { + "$ref": "AAAAAAGSjTcBuBkIfAw=" + }, + "source": { + "$ref": "AAAAAAGSjTcBuBkIfAw=" + }, + "target": { + "$ref": "AAAAAAGSjTczVxkU22o=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjTczVxkU22o=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "IF fd == NULL", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjTflZRlMxVA=", + "_parent": { + "$ref": "AAAAAAGSjTczVxkU22o=" + }, + "name": "yes", + "source": { + "$ref": "AAAAAAGSjTczVxkU22o=" + }, + "target": { + "$ref": "AAAAAAGSjTfTpRlCvWw=" + } + }, + { + "_type": "FCFlow", + "_id": "AAAAAAGSjTkkkxmE+Kw=", + "_parent": { + "$ref": "AAAAAAGSjTczVxkU22o=" + }, + "name": "no", + "source": { + "$ref": "AAAAAAGSjTczVxkU22o=" + }, + "target": { + "$ref": "AAAAAAGSjTkF6Bl6m3A=" + } + } + ] + }, + { + "_type": "FCTerminator", + "_id": "AAAAAAGSjTfTpRlCvWw=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "return" + }, + { + "_type": "FCTerminator", + "_id": "AAAAAAGSjTkF6Bl6m3A=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "Start", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjTsRiBm4KQY=", + "_parent": { + "$ref": "AAAAAAGSjTkF6Bl6m3A=" + }, + "source": { + "$ref": "AAAAAAGSjTkF6Bl6m3A=" + }, + "target": { + "$ref": "AAAAAAGSjToRxxmVato=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjToRxxmVato=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "WHILE getline() != -1", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjTvE7BnX3tU=", + "_parent": { + "$ref": "AAAAAAGSjToRxxmVato=" + }, + "source": { + "$ref": "AAAAAAGSjToRxxmVato=" + }, + "target": { + "$ref": "AAAAAAGSjTtONRnBET8=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjTtONRnBET8=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "strcmp() == 0", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjTySvhnx0Sw=", + "_parent": { + "$ref": "AAAAAAGSjTtONRnBET8=" + }, + "name": "yes", + "source": { + "$ref": "AAAAAAGSjTtONRnBET8=" + }, + "target": { + "$ref": "AAAAAAGSjTwVRRnlvNU=" + } + }, + { + "_type": "FCFlow", + "_id": "AAAAAAGSjT/RshpKwDo=", + "_parent": { + "$ref": "AAAAAAGSjTtONRnBET8=" + }, + "name": "no", + "source": { + "$ref": "AAAAAAGSjTtONRnBET8=" + }, + "target": { + "$ref": "AAAAAAGSjT5Wihopz8Q=" + } + } + ] + }, + { + "_type": "FCProcess", + "_id": "AAAAAAGSjTwVRRnlvNU=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "(*nb_loss)++", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjT3YmBob5sY=", + "_parent": { + "$ref": "AAAAAAGSjTwVRRnlvNU=" + }, + "source": { + "$ref": "AAAAAAGSjTwVRRnlvNU=" + }, + "target": { + "$ref": "AAAAAAGSjT2JWRoBw48=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjT2JWRoBw48=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "getline() != -1", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjT7rnxo0phc=", + "_parent": { + "$ref": "AAAAAAGSjT2JWRoBw48=" + }, + "name": "yes", + "source": { + "$ref": "AAAAAAGSjT2JWRoBw48=" + }, + "target": { + "$ref": "AAAAAAGSjToRxxmVato=" + } + }, + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUEw6hpxfNk=", + "_parent": { + "$ref": "AAAAAAGSjT2JWRoBw48=" + }, + "name": "no", + "source": { + "$ref": "AAAAAAGSjT2JWRoBw48=" + }, + "target": { + "$ref": "AAAAAAGSjUB5SxplzmI=" + } + } + ] + }, + { + "_type": "FCTerminator", + "_id": "AAAAAAGSjT5Wihopz8Q=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "Start", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUidrBseEDw=", + "_parent": { + "$ref": "AAAAAAGSjT5Wihopz8Q=" + }, + "source": { + "$ref": "AAAAAAGSjT5Wihopz8Q=" + }, + "target": { + "$ref": "AAAAAAGSjUhJuRsR6hk=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjUB5SxplzmI=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "IF *nb_ping > 0", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUGxqRqJvVQ=", + "_parent": { + "$ref": "AAAAAAGSjUB5SxplzmI=" + }, + "name": "no", + "source": { + "$ref": "AAAAAAGSjUB5SxplzmI=" + }, + "target": { + "$ref": "AAAAAAGSjUF0kRp8vxM=" + } + }, + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUK/oBqhrSI=", + "_parent": { + "$ref": "AAAAAAGSjUB5SxplzmI=" + }, + "name": "yes", + "source": { + "$ref": "AAAAAAGSjUB5SxplzmI=" + }, + "target": { + "$ref": "AAAAAAGSjUKX7xqXLRE=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjUF0kRp8vxM=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "read_line != NULL", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUb1XBrLT6I=", + "_parent": { + "$ref": "AAAAAAGSjUF0kRp8vxM=" + }, + "name": "yes", + "source": { + "$ref": "AAAAAAGSjUF0kRp8vxM=" + }, + "target": { + "$ref": "AAAAAAGSjUaJ6xq98d0=" + } + }, + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUeZdRrwnm4=", + "_parent": { + "$ref": "AAAAAAGSjUF0kRp8vxM=" + }, + "source": { + "$ref": "AAAAAAGSjUF0kRp8vxM=" + }, + "target": { + "$ref": "AAAAAAGSjUdoGxrifi0=" + } + } + ] + }, + { + "_type": "FCProcess", + "_id": "AAAAAAGSjUKX7xqXLRE=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "action", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUSwwhqvNYs=", + "_parent": { + "$ref": "AAAAAAGSjUKX7xqXLRE=" + }, + "source": { + "$ref": "AAAAAAGSjUKX7xqXLRE=" + }, + "target": { + "$ref": "AAAAAAGSjUF0kRp8vxM=" + } + } + ] + }, + { + "_type": "FCProcess", + "_id": "AAAAAAGSjUaJ6xq98d0=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "Process1", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUfibhr/j6Q=", + "_parent": { + "$ref": "AAAAAAGSjUaJ6xq98d0=" + }, + "source": { + "$ref": "AAAAAAGSjUaJ6xq98d0=" + }, + "target": { + "$ref": "AAAAAAGSjUdoGxrifi0=" + } + } + ] + }, + { + "_type": "FCTerminator", + "_id": "AAAAAAGSjUdoGxrifi0=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "return" + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjUhJuRsR6hk=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "IF ping >= 0.1", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUjmNRspeaY=", + "_parent": { + "$ref": "AAAAAAGSjUhJuRsR6hk=" + }, + "name": "no", + "source": { + "$ref": "AAAAAAGSjUhJuRsR6hk=" + }, + "target": { + "$ref": "AAAAAAGSjT2JWRoBw48=" + } + }, + { + "_type": "FCFlow", + "_id": "AAAAAAGSjUzeiRtK46A=", + "_parent": { + "$ref": "AAAAAAGSjUhJuRsR6hk=" + }, + "source": { + "$ref": "AAAAAAGSjUhJuRsR6hk=" + }, + "target": { + "$ref": "AAAAAAGSjUxHUhs8blg=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjUxHUhs8blg=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "IF ping > *max", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjU7TnRtiC4s=", + "_parent": { + "$ref": "AAAAAAGSjUxHUhs8blg=" + }, + "source": { + "$ref": "AAAAAAGSjUxHUhs8blg=" + }, + "target": { + "$ref": "AAAAAAGSjU6VFxtXs84=" + } + }, + { + "_type": "FCFlow", + "_id": "AAAAAAGSjVBh2Bu9Vv0=", + "_parent": { + "$ref": "AAAAAAGSjUxHUhs8blg=" + }, + "source": { + "$ref": "AAAAAAGSjUxHUhs8blg=" + }, + "target": { + "$ref": "AAAAAAGSjU/tfxuG/dM=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjU6VFxtXs84=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "IF ping < *min", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjU/QmRt7GI0=", + "_parent": { + "$ref": "AAAAAAGSjU6VFxtXs84=" + }, + "source": { + "$ref": "AAAAAAGSjU6VFxtXs84=" + }, + "target": { + "$ref": "AAAAAAGSjU9DNhtwzgA=" + } + }, + { + "_type": "FCFlow", + "_id": "AAAAAAGSjVDKHxvbVHY=", + "_parent": { + "$ref": "AAAAAAGSjU6VFxtXs84=" + }, + "source": { + "$ref": "AAAAAAGSjU6VFxtXs84=" + }, + "target": { + "$ref": "AAAAAAGSjU/13BuOry0=" + } + } + ] + }, + { + "_type": "FCDecision", + "_id": "AAAAAAGSjU9DNhtwzgA=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "IF ping > 100.0", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjVE8QBv5CrI=", + "_parent": { + "$ref": "AAAAAAGSjU9DNhtwzgA=" + }, + "source": { + "$ref": "AAAAAAGSjU9DNhtwzgA=" + }, + "target": { + "$ref": "AAAAAAGSjVAHRhuXT6E=" + } + } + ] + }, + { + "_type": "FCProcess", + "_id": "AAAAAAGSjU/tfxuG/dM=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "Process2", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjVB7hhvImhs=", + "_parent": { + "$ref": "AAAAAAGSjU/tfxuG/dM=" + }, + "source": { + "$ref": "AAAAAAGSjU/tfxuG/dM=" + }, + "target": { + "$ref": "AAAAAAGSjU6VFxtXs84=" + } + } + ] + }, + { + "_type": "FCProcess", + "_id": "AAAAAAGSjU/13BuOry0=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "Process3", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjVEVBhvtZj0=", + "_parent": { + "$ref": "AAAAAAGSjU/13BuOry0=" + }, + "source": { + "$ref": "AAAAAAGSjU/13BuOry0=" + }, + "target": { + "$ref": "AAAAAAGSjU9DNhtwzgA=" + } + } + ] + }, + { + "_type": "FCProcess", + "_id": "AAAAAAGSjVAHRhuXT6E=", + "_parent": { + "$ref": "AAAAAAGSjTa+rRkDXR0=" + }, + "name": "Process4", + "ownedElements": [ + { + "_type": "FCFlow", + "_id": "AAAAAAGSjVFJBhwCMqY=", + "_parent": { + "$ref": "AAAAAAGSjVAHRhuXT6E=" + }, + "source": { + "$ref": "AAAAAAGSjVAHRhuXT6E=" + }, + "target": { + "$ref": "AAAAAAGSjT2JWRoBw48=" + } + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ping-report/.vscode/c_cpp_properties.json b/ping-report/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..c2098a2 --- /dev/null +++ b/ping-report/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "linux-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "/usr/bin/gcc", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "linux-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/ping-report/.vscode/launch.json b/ping-report/.vscode/launch.json new file mode 100644 index 0000000..39e32d3 --- /dev/null +++ b/ping-report/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": false, + "cwd": "/home/matth/Documents/info/but3/optimisation-refractor/TD2_DEV51_Qualite_Algo/ping-report/src", + "program": "/home/matth/Documents/info/but3/optimisation-refractor/TD2_DEV51_Qualite_Algo/ping-report/src/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/ping-report/.vscode/settings.json b/ping-report/.vscode/settings.json new file mode 100644 index 0000000..3e5eb95 --- /dev/null +++ b/ping-report/.vscode/settings.json @@ -0,0 +1,59 @@ +{ + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/ping-report/Makefile b/ping-report/Makefile new file mode 100644 index 0000000..f5086ee --- /dev/null +++ b/ping-report/Makefile @@ -0,0 +1,29 @@ +CC=gcc +CFLAGS=-W -Wall -pedantic +LDFLAGS=-lsqlite3 +EXEC=ping-report +SRC=$(wildcard src/*.c) +OBJ=$(SRC:.c=.o) + +all : $(EXEC) + +ping-report : $(OBJ) + $(CC) -o $@ $^ $(LDFLAGS) + rm -f src/*.o + +ping-report.o : include/daemon.h + +daemon.o : include/stats.h include/utils.h + +stats.o : include/utils.h + +%.o : src/%.c + $(CC) -o $@ -c $< $(CFLAGS) -lsqlite + +.PHONY: clean mrproper + +clean : + rm -f src/*.o + +mrproper : clean + rm -f ping-report diff --git a/ping-report/README.md b/ping-report/README.md new file mode 100644 index 0000000..f13c785 --- /dev/null +++ b/ping-report/README.md @@ -0,0 +1,31 @@ +# ping-report + +## Installation + +Lancer la commande suivante pour installer ping-report : +> sudo ./install-ping-report.sh + +## Utilisation + +Lancer la commande **ping-report start** afin de lancer le daemon : +> ping-report start + +Lancer la commande **ping-report end** afin d'arreter le daemon : +> ping-report end + +Lancer la commande **ping-report restart** afin de relancer le daemon : +> ping-report restart + +Lancer la commande **ping-report status** afin de voir le status du daemon : +> ping-report status + +## Arborescence fichier + +### src +dossier contenant les fichiers sources du programme +### include +dossier contenant les fichiers d'en-tĂȘte du programme +### res +dossier contenant les fichiers ressources du programme + +## Descriptions fonctions diff --git a/ping-report/include/daemon.h b/ping-report/include/daemon.h new file mode 100644 index 0000000..68352a5 --- /dev/null +++ b/ping-report/include/daemon.h @@ -0,0 +1,7 @@ +#ifndef DAEMON_H +#define DAEMON_H + +int create_daemon(); +void daemon_work(); + +#endif diff --git a/ping-report/include/db-sqlite.h b/ping-report/include/db-sqlite.h new file mode 100644 index 0000000..fdbb130 --- /dev/null +++ b/ping-report/include/db-sqlite.h @@ -0,0 +1,8 @@ +#ifndef DB_SQLITE_H +#define DB_SQLITE_H + +int db_connect(); +int db_disconnect(); +int insert_hourly_report(double mean,double max,double min,int high,int loss,int reached); + +#endif diff --git a/ping-report/include/ping-report.h b/ping-report/include/ping-report.h new file mode 100644 index 0000000..0bacfd7 --- /dev/null +++ b/ping-report/include/ping-report.h @@ -0,0 +1,4 @@ +#ifndef PING_REPORT_H +#define PING_REPORT_H + +#endif diff --git a/ping-report/include/stats.h b/ping-report/include/stats.h new file mode 100644 index 0000000..931e6b2 --- /dev/null +++ b/ping-report/include/stats.h @@ -0,0 +1,8 @@ +#ifndef STATS_H +#define STATS_H + +/*@null@*/char* get_ping_from_temp_log(); +void write_ping_log(char* new_ping); +void set_stats_ping(); + +#endif diff --git a/ping-report/include/utils.h b/ping-report/include/utils.h new file mode 100644 index 0000000..eb215cb --- /dev/null +++ b/ping-report/include/utils.h @@ -0,0 +1,9 @@ +#ifndef UTILS_H +#define UTILS_H + +#define STATUS_LOG "/var/log/ping-report/status.log" + +void write_pid_file(); +void remove_file(char* filename); + +#endif diff --git a/ping-report/install-ping-report.sh b/ping-report/install-ping-report.sh new file mode 100644 index 0000000..087491c --- /dev/null +++ b/ping-report/install-ping-report.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +#Variables +CUR_DIR=`pwd` +OPT_DIR=/opt/ping-report +BIN_OPT_DIR=/opt/ping-report/bin +BIN_DIR=/bin +LOG_DIR=/var/log/ping-report +STATUS_LOG=/var/log/ping-report/status.log +DB_SCRIPT=./res/ping-report-db.sql +DB_DIR=/srv/ping-report +DB=/srv/ping-report/ping-report.db +BIN=ping-report +SCRIPT=./res/ping-report.sh +SCRIPT_DIR=/opt/ping-report/ping-report.sh +DYN_LINK=/bin/ping-report + +#Start install script + +#Check 1st arg +case $1 in +--full-install) rm $DB; + echo "full install of ping-report ...";; +-f) rm $DB; + echo "full install of ping-report ...";; +*) echo "default install of ping-report ...";; +esac + +#Create OPT_DIR +if test -d "$OPT_DIR"; then + echo "opt dir already exists, no actions needed." +else + mkdir $OPT_DIR +fi + +#Create BIN_OPT_DIR +if test -d "$BIN_OPT_DIR"; then + echo "bin opt dir already exists, no actions needed." +else + mkdir $BIN_OPT_DIR +fi + +#Create LOG_DIR +if test -d "$LOG_DIR"; then + echo "log dir already exists, no actions needed" +else + mkdir $LOG_DIR +fi + +#Create / Erase STATUS_LOG +touch $STATUS_LOG +chmod 666 $STATUS_LOG + +#Create DB_DIR +if test -d "$DB_DIR"; then + echo "database dir already exists, no actions needed" +else + mkdir $DB_DIR +fi + +#Compile ping-report +make + +#Move ping-report bin to BIN_OPT_DIR +mv $BIN $BIN_OPT_DIR + +#Copy launch script to OPT_DIR +cp $SCRIPT $OPT_DIR + +#Create DYN_LINK +if test -f "$DYN_LINK"; then + echo "dynamic link already exists, no actions needed." +else + #Change current directory to /bin to create dynamic link + cd $BIN_DIR + #Create the dynamic link to SCRIPT + ln -s $SCRIPT_DIR $BIN + #Change directory to the previous one + cd $CUR_DIR +fi + +#Create SQLITE DB + +if test -f "$DB"; then + echo "db already exists, no actions needed" +else + cd $DB_DIR + sqlite3 ping-report.db < $CUR_DIR/$DB_SCRIPT + cd $CUR_DIR +fi diff --git a/ping-report/res/ping-report-db.sql b/ping-report/res/ping-report-db.sql new file mode 100644 index 0000000..8a8e414 --- /dev/null +++ b/ping-report/res/ping-report-db.sql @@ -0,0 +1,58 @@ +CREATE TABLE HourlyReport( + ping_max FLOAT NOT NULL, + ping_min FLOAT NOT NULL, + ping_mean FLOAT NOT NULL, + nb_ping_high INT NOT NULL, + nb_ping_loss INT NOT NULL, + nb_ping_reached INT NOT NULL, + report_day DATE NOT NULL, + report_hour INT NOT NULL +); + +CREATE VIEW DailyReport AS +SELECT + H.report_day, + MAX(H.ping_max) AS daily_worst_ping, + MIN(H.ping_min) AS daily_best_ping, + AVG(H.ping_mean) AS daily_mean_ping, + SUM(H.nb_ping_high) AS daily_high_ping, + SUM(H.nb_ping_loss) AS daily_loss_ping, + SUM(H.nb_ping_reached) AS daily_reached_ping, + ( + SELECT + SH.report_hour + FROM + HourlyReport SH + WHERE + SH.ping_mean = ( + SELECT + MIN(SSH.ping_mean) + FROM + HourlyReport SSH + WHERE + SSH.report_day = sh.report_day + ) + AND + SH.report_day = H.report_day + ) daily_best_hour, + ( + SELECT + SH.report_hour + FROM + HourlyReport SH + WHERE + SH.ping_mean = ( + SELECT + MAX(SSH.ping_mean) + FROM + HourlyReport SSH + WHERE + SSH.report_day = sh.report_day + ) + AND + SH.report_day = H.report_day + ) daily_worst_hour +FROM + HourlyReport H +GROUP BY + report_day diff --git a/ping-report/res/ping-report.sh b/ping-report/res/ping-report.sh new file mode 100644 index 0000000..3d48d57 --- /dev/null +++ b/ping-report/res/ping-report.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +BIN=/opt/ping-report/bin/ping-report +PID=/var/log/ping-report/pid.log +STATUS=/var/log/ping-report/status.log + +case $1 in +start) sudo echo "STARTED" > $STATUS; + sudo $BIN; + echo "ping-report started";; +end) sudo echo "STOP" > $STATUS; + sudo rm $PID; + sleep 2; + sudo echo "ENDED" > $STATUS; + echo "ping-report ended";; +kill) sudo kill `cat $PID`; + sudo rm $PID; + sudo echo "ENDED" > $STATUS; + echo "ping-report killed";; +restart) sudo echo "STOP" > $STATUS; + sleep 2; + sudo rm $PID; + sudo echo "STARTED" > $STATUS; + sudo $BIN; + echo "ping-report restarted";; +status) if test -f "$PID"; then + echo "ping-report is alive"; + else + echo "ping-report is not started"; + fi;; +*) echo "Usage : ping-report [start | end | kill | restart]"; + exit 1;; +esac + diff --git a/ping-report/src/daemon.c b/ping-report/src/daemon.c new file mode 100644 index 0000000..7cbbc51 --- /dev/null +++ b/ping-report/src/daemon.c @@ -0,0 +1,218 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../include/daemon.h" +#include "../include/utils.h" +#include "../include/stats.h" +#include "../include/db-sqlite.h" + +/* + -- create_daemon -- + Desc : + Function which create a daemon + In-param : + None + Out-param : + None + Return value : + -1 : Error fork + 0 : Daemon branch + 1 : Parent process branch + +*/ +int create_daemon(){ + + /* Variables */ + pid_t pid; + int fd; + + /* Fork a new process */ + pid = (pid_t) fork(); + + if(pid < 0){ + /* Error while forking */ + /* todo : add log */ + return -1; + } + if(pid > 0){ + /* Parent process branch : quit function */ + return 1; + } + + /* Son process branch */ + + /* Set file permissions */ + (void) umask(0); + + /* Change working directory to root directory */ + (void) chdir("/"); + + /* Close all open file descriptors */ + for(fd = (int) sysconf(_SC_OPEN_MAX); fd >= 0; fd--){ + (void) close(fd); + } + + return 0; +} + +/* + -- ping_request -- + Desc : + Ping the DNS (1.1.1.1) then write the ping in log file + In-param : + None + Out-param : + None + Return value : + None +*/ +static void ping_request(){ + + /* Variables */ + char* ping; + static char command[128] = "ping -c 1 1.1.1.1 > /var/log/ping-report/last-ping.log"; + + /* ping command */ + (void) system(command); + /* Get ping value as a string */ + ping = get_ping_from_temp_log(); + if(ping != NULL) { + /* Write ping in all-ping.log */ + write_ping_log(ping); + } + +} + +/* + -- send_check -- + Desc : + Send if send_stats_ping is needed and if so, do it + In-param : + None + Out-param : + None + Return value : + None +*/ +static void send_check(){ + + /* Variables */ + time_t t; + struct tm* utc_time; + static int flag = 1; + + /* Get time */ + t = time(NULL); + utc_time = localtime(&t); + + /* Set flag to avoid sending multiple time the same data at HH:00 */ + if((utc_time->tm_min != 0)&& (flag == 0)){ + flag = 1; + } + + /* if time == HH:00, insert stats in db */ + if((utc_time->tm_min == 0) && (flag != 0)){ + set_stats_ping(); + remove_file("/var/log/ping-report/all-ping.log"); + flag = 0; + } + +} + +/* + -- check_keep_working -- + Desc : + Check if ping-report need to be ended + In-param : + None + Out-param : + None + Return value : + keep_working : 1 continue, 0 end +*/ +static int check_keep_working(){ + + /* Variables */ + FILE* fd; + char read_line[5]; + + fd = fopen(STATUS_LOG,"r"); + + if(fd == NULL){ + // Error occured while reading status log file, stop ping-report + printf("Err\n"); + return 0; + } + + /* Read file */ + if(fread(read_line,sizeof(char),4,fd) != 0){ + + (void) fclose(fd); + read_line[4] = '\0'; + + if(strcmp(read_line,"STOP") == 0){ + // stop ping-report + printf("Stop\n"); + return 0; + }else{ + // continue ping-report + printf("%s : Continue\n",read_line); + return 1; + } + }else{ + // Error occured while reading status log file, stop ping-report + printf("Nothing to read\n"); + (void) fclose(fd); + return 1; + } +} + +/* + -- daemon_work -- + Desc : + Function which contain main loop of the daemon + In-param : + None + Out-param : + None + Return value : + None +*/ +void daemon_work(){ + + /* Variables */ + int keep_working = 1; + + /* Write daemon pid in log file */ + write_pid_file(); + + /* Connect db sqlite */ + if(db_connect()){ + return; + } + /* Main loop */ + while(keep_working != 0){ + + /* Launch ping command */ + ping_request(); + + /* Send stats if time is correct */ + send_check(); + + /* Check end ping-report */ + keep_working = check_keep_working(); + + /* ping_interval 100 ms */ + usleep(100*1000); + + } + + /* Disconnect sqlite db */ + db_disconnect(); +} diff --git a/ping-report/src/db-sqlite.c b/ping-report/src/db-sqlite.c new file mode 100644 index 0000000..914f89a --- /dev/null +++ b/ping-report/src/db-sqlite.c @@ -0,0 +1,66 @@ +#include +#include +#include + +#include "../include/stats.h" +#include "../include/db-sqlite.h" + +/* Globals for this file */ +static sqlite3 *db = NULL; +static char db_filename[] = "/srv/ping-report/ping-report.db"; + +/* + -- db_connect -- + Desc : + Connect the sqlite db + In-param : + None + Out-param : + None + Return value : + sqlite3_open rc +*/ +int db_connect(){ + return sqlite3_open(db_filename,&db); +} + +/* + -- db_disconnect -- + Desc : + Disconnect the sqlite db + In-param : + None + Out-param : + None + Return value : + sqlite3_close rc +*/ +int db_disconnect(){ + return sqlite3_close(db); +} + +/* + -- insert_hourly_report -- + Desc : + Insert ping hourly stats + In-param : + ping value + Out-param : + None + Return value : + sqlite3_exec rc +*/ +int insert_hourly_report(double mean, double max, double min, int high, int loss, int reached){ + + int rc = 0; + char statement[128]; + time_t t = time(NULL); + struct tm* tm = localtime(&t); + + (void) snprintf(statement,128,"INSERT INTO HourlyReport VALUES (%lf,%lf,%lf,%d,%d,%d,'%d-%d-%d',%d)", + max,min,mean,high,loss,reached,tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour); + + rc = sqlite3_exec(db,statement,NULL,NULL,NULL); + + return rc; +} diff --git a/ping-report/src/ping-report.c b/ping-report/src/ping-report.c new file mode 100644 index 0000000..caf6b6d --- /dev/null +++ b/ping-report/src/ping-report.c @@ -0,0 +1,38 @@ +#include "../include/daemon.h" + +/* + -- main -- + Desc : + Main function + In-param : + argc : argument count + argv : argument list + Out-param : + None + Return value : + 0 : Normal end of program + 1 : Error while creating daemon + 2 : Parent process quit + 3 : Unknown error +*/ +int main(/*int argc, char** argv*/){ + + /* Daemon creation */ + switch(create_daemon()){ + case 0: + /* Daemon execution */ + daemon_work(); + break; + case -1: + /* Error : quit program */ + return 1; + case 1: + /* Parent process : quit program */ + return 2; + default: + return 3; + } + + return 0; + +} diff --git a/ping-report/src/stats.c b/ping-report/src/stats.c new file mode 100644 index 0000000..5d2766d --- /dev/null +++ b/ping-report/src/stats.c @@ -0,0 +1,267 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../include/utils.h" +#include "../include/stats.h" +#include "../include/db-sqlite.h" + +/* + -- get_ping_from_temp_log -- + Desc : + Function which get the ping from a temp log containing the last ping did by the program + In-param : + None + Out-param : + None + Return value : + Ping value as a string or NULL if an error occured +*/ +/*@null@*/char* get_ping_from_temp_log(){ + + /* Variables */ + FILE* fd = NULL; + char* read_line = NULL; + size_t n = 0; + size_t nmatch = 2; + regex_t *p_reg; + regmatch_t* pmatch; + char* ping = NULL; + int start; + int end; + size_t size_ping; + + /* regex struct memory allocation */ + p_reg = (regex_t *) malloc(sizeof(*p_reg)); + if(p_reg == NULL){ + return ping; /* NULL */ + } + + /* Open ping log file */ + fd = fopen("/var/log/ping-report/last-ping.log","r"); + if(fd == NULL){ + free(p_reg); + return ping; /* NULL */ + } + + /* Construct regex to get ping from log file */ + if(regcomp(p_reg,"time=(.*) ms",REG_EXTENDED) != 0){ + if(p_reg != NULL){ + free(p_reg); + } + (void) fclose(fd); + return ping; /* NULL */ + } + + /* match info memory allocation */ + pmatch = malloc(sizeof(*pmatch) * nmatch); + if(pmatch == NULL){ + (void) fclose(fd); + regfree(p_reg); + free(p_reg); + return ping; /* NULL */ + } + + /* Read file */ + read_line = read_file_perso(n, fd, read_line, p_reg, nmatch, pmatch, start, end, size_ping, ping); + + /* free allocated memory */ + regfree(p_reg); + free(p_reg); + free(pmatch); + if(read_line != NULL){ + free(read_line); + } + + (void) fclose(fd); + + /* ping may be null, then it must mean that the ping request was lost */ + return ping; +} + +char* read_file_perso(size_t n, FILE* fd, char* read_line, regex_t p_reg, size_t pmatch, int start, + int end, size_t size_ping, char* ping) { + + while(getline(&read_line,&n,fd) != -1){ + + if(read_line == NULL){ + break; + } + + /* Exec regex to find ping */ + + if(regexec(p_reg,read_line,nmatch,pmatch,0) == 0){ + + /* Extract ping position from read line */ + start = (int) pmatch[1].rm_so; + end = (int) pmatch[1].rm_eo; + size_ping = (size_t) (end - start); + + /* ping string memory allocation */ + ping = malloc(sizeof(char) * (size_ping+2)); + if(ping == NULL){ + free(read_line); + read_line = NULL; + n = 0; + break; + } + + /* Create ping string */ + (void) strncpy(ping, &read_line[start], size_ping); + ping[size_ping]='\n'; + ping[size_ping+1]='\0'; + + /* Free memory */ + free(read_line); + read_line = NULL; + n = 0; + break; + } + + free(read_line); + read_line = NULL; + n = 0; + } + + return read_line; +} + +/* + -- write_ping_log -- + Desc : + Function which write a given ping in log file + In-param : + new_ping : string value of a ping + Out-param : + None + Return value : + None +*/ +void check_ping_log(char* new_ping){ + + /* Variables */ + FILE* fd; + + /* Open log file */ + fd = fopen("/var/log/ping-report/all-ping.log","a+"); + + if(fd != NULL){ + if(new_ping == NULL){ + char* res = write_ping_log(); + } + (void) fwrite(res, sizeof(char), strlen(res), fd); + (void) fclose(fd); + }else{ + perror("write ping : "); + } + + free(new_ping); +} + +char* write_ping_log(File* fd) { + new_ping = (char *) malloc(5*sizeof(char)); + if(new_ping == NULL){ + (void) fclose(fd); + return; + } + (void) snprintf(new_ping,5*sizeof(char),"LOSS"); +} + +/* + -- set_stats_ping -- + Desc : + Function which calculate statistics about ping values, from log file. + In-param : + None + Out-param : + None + Return value : + None +*/ +void process_ping_line(const char* line, double* sum, double* max, double* min, int* nb_ping, int* nb_high) { + double ping = strtod(line, NULL); + + // Ignore pings below 0.1 (treated as null ping) + if (ping >= 0.1) { + (*nb_ping)++; + + // Update max and min pings + if (ping > *max) { + *max = ping; + } + if (ping < *min) { + *min = ping; + } + + // Count pings above 100 ms + if (ping > 100.0) { + (*nb_high)++; + } + + // Accumulate ping for mean calculation + *sum += ping; + } +} + +void calculate_ping_stats(FILE* fd, double* mean, double* max, double* min, int* nb_high, int* nb_loss, int* nb_ping) { + char* read_line = NULL; + size_t n = 0; + double sum = 0.0; + + // Initialize max and min values + *max = 0.0; + *min = 100.0; + + // Process each line of the log + while (getline(&read_line, &n, fd) != -1) { + if (strcmp(read_line, "LOSS") == 0) { + (*nb_loss)++; + } else { + process_ping_line(read_line, &sum, max, min, nb_ping, nb_high); + } + + free(read_line); + read_line = NULL; // Reset pointer for next getline call + n = 0; + } + + // Calculate the mean if there are valid pings + if (*nb_ping > 0) { + *mean = sum / (double)(*nb_ping); + } + + // Free memory if any remaining + if (read_line != NULL) { + free(read_line); + } +} + +void set_stats_ping() { + FILE* fd = fopen("/var/log/ping-report/all-ping.log", "r"); + + if (fd == NULL) { + perror("stats : "); + return; + } + + // Variables for stats + double mean = 0.0, max = 0.0, min = 100.0; + int nb_high = 0, nb_loss = 0, nb_ping = 0; + + // Calculate stats + calculate_ping_stats(fd, &mean, &max, &min, &nb_high, &nb_loss, &nb_ping); + + // Close file after reading + fclose(fd); + + // Insert report + insert_hourly_report(mean, max, min, nb_high, nb_loss, nb_ping); +} + + + diff --git a/ping-report/src/utils.c b/ping-report/src/utils.c new file mode 100644 index 0000000..5ca4bb5 --- /dev/null +++ b/ping-report/src/utils.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include + +#include "../include/utils.h" + +/* + -- write_pid_file -- + Desc : + write pid in a log file + In-param : + None + Out-param : + None + Return value : + None +*/ +void write_pid_file(){ + + /* Variables */ + FILE* fd; + pid_t pid = (pid_t) getpid(); + char pid_str[16]; + + fd = fopen("/var/log/ping-report/pid.log","w+"); + + if(fd == NULL){ + return; + } + + (void) snprintf(pid_str,16,"%d",(int) pid); + (void) fwrite(pid_str,strlen(pid_str),1,fd); + (void) fclose(fd); + +} + +/* + -- remove_file -- + Desc : + Remove a file from filesystem + In-param : + filename : the name of the file to remove + Out-param : + None + Return value : + None +*/ +void remove_file(char* filename){ + + /* Variable */ + char remove_cmd[128]; + + /* remove file */ + (void) snprintf(remove_cmd, 128, "rm -f %s",filename); + (void) system(remove_cmd); + +} +