Bläddra i källkod

Add log output for generators

Andrea Fazzi 5 år sedan
förälder
incheckning
4e31c0410a

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/main.bundle.js


+ 5 - 0
dist/styles.css

@@ -13980,4 +13980,9 @@ ul.karmen-related-elements {
     font-size: 10px;
 }
 
+.terminal {
+    background-color: black;
+    color: white;
+}
+
 /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzdHlsZXMuY3NzIiwic291cmNlUm9vdCI6IiJ9*/

+ 28 - 1
generator/generators/list/list.go

@@ -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 {

+ 5 - 6
main.go

@@ -73,15 +73,14 @@ func main() {
 	for _, g := range files {
 		gTypes = append(gTypes, &orm.GeneratorType{Name: filepath.Base(g)})
 	}
-	log.Println("Create generator_type table...")
+	log.Println("Update generator_type table...")
 	for _, gt := range gTypes {
-		var genType orm.GeneratorType
-		if err := orm.DB().Where("name = ?", gt.Name).First(&genType).Error; err != nil {
+		var gTypes []orm.GeneratorType
+		if err := orm.DB().Find(&gTypes).Error; err != nil {
 			panic(err)
 		}
-		log.Println(genType)
-		if genType.Name == "" {
-			err := orm.DB().Debug().Create(gt).Error
+		if len(gTypes) == 0 {
+			err := orm.DB().Create(gt).Error
 			if err != nil {
 				panic(err)
 			}

+ 19 - 3
orm/document.go

@@ -25,7 +25,8 @@ type Document struct {
 	OutputPath string
 	CloudPath  string
 
-	GeneratorTypeID string
+	GeneratorTypeID uint
+	GeneratorType   *GeneratorType
 
 	Jobs []*Job
 
@@ -37,9 +38,17 @@ type Document struct {
 
 type DocumentForUpdate struct {
 	Document
+
+	AllGeneratorTypes []*GeneratorType
+
+	SelectedGeneratorType map[uint]string
 }
 
-type DocumentForAdd struct{}
+type DocumentForAdd struct {
+	Document
+
+	AllGeneratorTypes []*GeneratorType
+}
 
 func (s *Document) GetID() uint { return s.ID }
 
@@ -79,7 +88,7 @@ func GetDocuments(args map[string]string) (interface{}, error) {
 
 func GetDocumentsAll(args map[string]string) (interface{}, error) {
 	var documents []*Document
-	if err := DB().Order("name").Find(&documents).Error; err != nil {
+	if err := DB().Preload("GeneratorType").Order("name").Find(&documents).Error; err != nil {
 		return nil, err
 	}
 	return documents, nil
@@ -155,6 +164,13 @@ func GetDocumentForUpdate(args map[string]string) (interface{}, error) {
 		return nil, err
 	}
 
+	if err := DB().Find(&data.AllGeneratorTypes).Error; err != nil {
+		return nil, err
+	}
+
+	data.SelectedGeneratorType = make(map[uint]string)
+	data.SelectedGeneratorType[data.GeneratorTypeID] = "selected"
+
 	return data, nil
 }
 

+ 11 - 1
orm/job.go

@@ -17,12 +17,22 @@ type File struct {
 	JobID uint
 }
 
+type Log struct {
+	gorm.Model
+
+	Content string
+
+	JobID uint
+}
+
 type Job struct {
 	gorm.Model
 
 	Name     string
 	Document *Document
 
+	Logs []*Log
+
 	DocumentID uint
 
 	Files []*File
@@ -55,7 +65,7 @@ func GetJobs(args map[string]string) (interface{}, error) {
 
 func GetJob(args map[string]string) (interface{}, error) {
 	var job Job
-	if err := DB().Preload("Document").Preload("Files").First(&job, args["id"]).Error; err != nil {
+	if err := DB().Preload("Document").Preload("Files").Preload("Logs").First(&job, args["id"]).Error; err != nil {
 		return nil, err
 	}
 	return &job, nil

+ 1 - 0
orm/orm.go

@@ -81,6 +81,7 @@ func AutoMigrate() {
 		&Job{},
 		&File{},
 		&GeneratorType{},
+		&Log{},
 	).Error; err != nil {
 		panic(err)
 	}

+ 5 - 0
src/style.css

@@ -88,3 +88,8 @@ ul.karmen-related-elements {
     margin-top: -20px;
     font-size: 10px;
 }
+
+.terminal {
+    background-color: black;
+    color: white;
+}

+ 3 - 1
templates/documents.html.tpl

@@ -29,9 +29,11 @@
     <a class="list-group-item list-group-item-action" href="/documents/{{$document.ID}}?{{query "tpl_layout" "base" "tpl_content" "documents_show"}}">
       <span class="fa fa-file"></span>
       {{$document.Name}}
+      {{if $document.GeneratorType}}
       <div class="text-right">
-	<small>optional tag goes here</small>
+	<small>{{$document.GeneratorType.Name}}</small>
       </div>
+      {{end}}
     </a>
     {{end}}
   </div>

+ 18 - 0
templates/documents_add_update.html.tpl

@@ -48,6 +48,24 @@
       <input type="text" name="CloudPath" class="form-control" id="document_cloud_path" placeholder="Documents/" {{if .Options.Get "update"}} value="{{.Data.CloudPath}}" {{end}} required>
     </div>
 
+        
+    <div class="form-group">
+      <label class="control-label" for="generator_type_id">Tipo di generatore</label>
+      <select name="GeneratorTypeID" class="form-control selectpicker" id="generator_type_id" placeholder="Tipo di generatore" data-live-search="true" form="form_documents_add_update" title="Seleziona il tipo di generatore" data-dropup-auto="false">
+	<option value="0"></option>
+  	{{range $generatorType := .Data.AllGeneratorTypes}}
+	{{if $.Options.Get "update"}}
+  	<option
+	   value="{{$generatorType.ID}}"
+	   {{index $.Data.SelectedGeneratorType $generatorType.ID}}>{{$generatorType.Name}}
+	</option>
+	{{else}}
+  	<option value="{{$generatorType.ID}}">{{$generatorType.Name}}</option>
+	{{end}}
+  	{{end}}
+      </select>
+    </div>
+
     <div class="form-group">
       <button type="submit" class="btn btn-primary">Salva</button>
       {{if .Options.Get "update"}}

+ 19 - 1
templates/jobs_show.html.tpl

@@ -13,7 +13,7 @@
   <div class="karmen-info-header">
     <div class="row">
       <div class="col-md-8">
-	<h1>{{.Data.Name}}</h1>
+	<h1>Lavoro ID {{.Data.ID}}</h1>
       </div>
       <div class="col-md-4">
         
@@ -49,6 +49,24 @@
     </div>
     
   </div>
+  
+  <div class="row">
+    <div class="col-md-12">    
+      <h2 class="karmen-relation-header">Messaggi dal generatore</h2>
+      {{if .Data.Logs}}
+      <pre class="terminal pre-scrollable">
+        <code>
+          {{range $log := .Data.Logs}}
+          {{$log.Content}}
+          {{- end}}
+        </code>
+      </pre>
+      {{else}}
+      <p>Non è stato prodotto nessun file..</p>
+      {{end}}
+    </div>
+    
+  </div>
 
 
 </div>    

Vissa filer visades inte eftersom för många filer har ändrats