| 
					
				 | 
			
			
				@@ -1,11 +1,13 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package main 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"bufio" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"errors" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"flow" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"flow/flowserver" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"flow/registry" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"io" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"log" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"math" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"math/rand" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -33,7 +35,7 @@ func main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		math.Abs, math.Cos, math.Sin, math.Exp, math.Exp2, math.Tanh, math.Max, math.Min, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	).Tags("math").Extra("style", registry.M{"color": "#386"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	// Rand functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	registry.Add(registry.Add(DockerPull)).Tags("devops") // Rand functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	registry.Batch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		registry.Add(rand.Int, rand.Intn, rand.Float64), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		registry.Register("Perm", func(n int) []int { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -94,3 +96,107 @@ func testRandomError(d flow.Data) (flow.Data, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return d, nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+////////////////////// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// DevOps SIM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//////// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type DockerImage struct{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func DockerPull(w io.Writer, imageName string) DockerImage { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sampleData := ` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	make: Entering directory '/home/stdio/coding/Projects/Flow' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+make -C go test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+make[1]: Entering directory '/home/stdio/coding/Projects/Flow/go' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+gocov test -race ./src/... | gocov report 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ok  	flow	1.020s	coverage: 84.1% of statements 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+?   	flow/cmd/buildops	[no test files] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+?   	flow/cmd/demo1	[no test files] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+?   	flow/flowserver	[no test files] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+?   	flow/flowserver/flowmsg	[no test files] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+?   	flow/internal/assert	[no test files] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ok  	flow/registry	1.011s	coverage: 100.0% of statements 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.String			 100.00% (11/11) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/utils.go		 RandString			 100.00% (10/10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 @290:21			 100.00% (8/8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.MarshalJSON		 100.00% (8/8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.Const			 100.00% (7/7) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.Var			 100.00% (6/6) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 @315:21			 100.00% (6/6) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/hook.go		 Hooks.Attach			 100.00% (3/3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.Run			 100.00% (2/2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.SetRegistry		 100.00% (2/2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 @107:12			 100.00% (2/2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 operation.ID			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 opFunc				 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 opVar				 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 opConst			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.In			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 @220:12			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.Res			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 @221:12			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 opIn				 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.Hook			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 operation.Set			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/hook.go		 Hooks.wait			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.SetIDGen			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/hook.go		 Hooks.finish			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 operation.processWithCtx	 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 @49:13				 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 newOpCtx			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 operation.Process		 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/hook.go		 Hooks.start			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 New				 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.DefOp			 92.31% (12/13) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.Op			 88.89% (16/18) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 @240:21			 84.21% (16/19) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.run			 84.21% (16/19) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 @166:8				 80.00% (4/5) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/hook.go		 Hooks.Trigger			 78.57% (11/14) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.Analyse			 75.00% (3/4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.getOp			 75.00% (3/4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/flow.go		 Flow.Must			 66.67% (2/3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 @93:12				 66.67% (2/3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 @121:12			 65.22% (30/46) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 @123:10			 33.33% (1/3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/hook.go		 Hooks.error			 0.00% (0/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 opNil				 0.00% (0/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 @229:12			 0.00% (0/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/operation.go	 dumbSet			 0.00% (0/0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow			 ------------------------	 84.10% (201/239) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/entry.go		 NewEntry		 100.00% (18/18) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/registry.go	 R.Get			 100.00% (12/12) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/registry.go	 R.Add			 100.00% (8/8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/entry.go		 Entry.DescInputs	 100.00% (8/8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/batch.go		 Batch			 100.00% (6/6) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/registry.go	 R.Register		 100.00% (5/5) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/entry.go		 Entry.Extra		 100.00% (4/4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/registry.go	 R.Entry		 100.00% (4/4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/registry.go	 R.Clone		 100.00% (4/4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/entry.go		 Entry.Tags		 100.00% (4/4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/entry.go		 Entry.DescOutput	 100.00% (4/4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/registry.go	 R.Descriptions		 100.00% (4/4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/batch.go		 EntryBatch.Extra	 100.00% (3/3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/batch.go		 EntryBatch.DescOutput	 100.00% (3/3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/batch.go		 EntryBatch.DescInputs	 100.00% (3/3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/batch.go		 EntryBatch.Tags	 100.00% (3/3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/entry.go		 Entry.Err		 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry/registry.go	 New			 100.00% (1/1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+flow/registry			 ---------------------	 100.00% (95/95) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Total Coverage: 88.62% (296/334) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+make[1]: Leaving directory '/home/stdio/coding/Projects/Flow/go' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+make: Leaving directory '/home/stdio/coding/Projects/Flow'` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	scanner := bufio.NewScanner(strings.NewReader(sampleData)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for scanner.Scan() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		time.Sleep(time.Duration(rand.Intn(4)) * time.Second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		w.Write([]byte(scanner.Text())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return DockerImage{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |