| 
					
				 | 
			
			
				@@ -31,6 +31,26 @@ type ListGenerator struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ncClient *cloud.Client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	kaClient *karmen_client.Client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	logger   *JobLogger 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type JobLogger struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	job *orm.Job 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func NewJobLogger(job *orm.Job) *JobLogger { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return &JobLogger{job} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (l *JobLogger) Write(p []byte) (n int, err error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	os.Stdout.Write(p) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	origLen := len(p) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if len(p) > 0 && p[len(p)-1] == '\n' { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		p = p[:len(p)-1] // Cut terminating newline 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	l.job.Logs = append(l.job.Logs, &orm.Log{Content: string(p)}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return origLen, nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var funcMap template.FuncMap = template.FuncMap{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -43,10 +63,14 @@ var funcMap template.FuncMap = template.FuncMap{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (generator *ListGenerator) generate(outputPath string, cloudPath string, teachers []*orm.Teacher, funcMap template.FuncMap) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	filename := filepath.Join(outputPath, "elenco_docenti") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	tplContent, err := generator.ncClient.Download(filepath.Join(cloudPath, "list.tpl.md")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	tplFilename := filepath.Join(cloudPath, "list.tpl.md") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	log.Printf("Downloading %s from the cloud...", tplFilename) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	tplContent, err := generator.ncClient.Download(tplFilename) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		log.Println(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	log.Println("Download completed.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	refContent, err := generator.ncClient.Download(filepath.Join(cloudPath, "reference.odt")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -180,6 +204,9 @@ func (generator *ListGenerator) Run() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			log.Println(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		generator.logger = NewJobLogger(job) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		log.SetOutput(generator.logger) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		job.Start = time.Now() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		err = generator.kaClient.UpdateJob(job) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if err != nil { 
			 |