...

Source file src/edge-infra.dev/pkg/f8n/devinfra/overlook/overlook.go

Documentation: edge-infra.dev/pkg/f8n/devinfra/overlook

     1  package overlook
     2  
     3  import (
     4  	"embed"
     5  	"html/template"
     6  	"log"
     7  	"net/http"
     8  	"os"
     9  	"sort"
    10  
    11  	"edge-infra.dev/pkg/f8n/devinfra/reports"
    12  
    13  	// needed for the postgres driver
    14  	"edge-infra.dev/pkg/f8n/devinfra/database/psql"
    15  
    16  	"github.com/gin-gonic/gin"
    17  )
    18  
    19  //go:embed *.tmpl
    20  var templates embed.FS
    21  
    22  type Table struct {
    23  	Issues []reports.Issues
    24  }
    25  
    26  func init() {
    27  	gin.SetMode(gin.ReleaseMode)
    28  }
    29  
    30  func Start() {
    31  	r := gin.Default()
    32  	logger := log.New(os.Stdout, "overlook", log.Ldate|log.Ltime|log.Lshortfile)
    33  
    34  	t, err := template.ParseFS(templates, "*.tmpl")
    35  	if err != nil {
    36  		logger.Fatalf("failed to load templates dir. err: %v", err.Error())
    37  	}
    38  	r.SetHTMLTemplate(t)
    39  
    40  	r.GET("/", func(c *gin.Context) {
    41  		psql, err := psql.New()
    42  		if err != nil {
    43  			log.Panic(err)
    44  		}
    45  
    46  		table := &Table{}
    47  
    48  		err = table.GetIssues(psql)
    49  		if err != nil {
    50  			logger.Fatal(err)
    51  		}
    52  
    53  		c.HTML(http.StatusOK, "index.tmpl", gin.H{
    54  			"title": "overlook",
    55  			"table": table,
    56  		})
    57  	})
    58  
    59  	r.GET("/api/health", func(c *gin.Context) {
    60  		c.JSON(200, gin.H{
    61  			"status": "ok",
    62  		})
    63  	})
    64  
    65  	logger.Println("starting server on port 8080")
    66  
    67  	if err := r.Run(":8080"); err != nil {
    68  		logger.Printf("error starting on port 8080: %v", err)
    69  		os.Exit(1)
    70  	}
    71  }
    72  
    73  // get the issues and return a list
    74  func (table *Table) GetIssues(psql *psql.Client) error {
    75  	rows, err := psql.Query("select * from issues")
    76  	if err != nil {
    77  		return err
    78  	}
    79  	defer rows.Close()
    80  
    81  	for rows.Next() {
    82  		issue := reports.Issues{}
    83  		err := rows.Scan(
    84  			&issue.Number,
    85  			&issue.Title,
    86  			&issue.Size,
    87  			&issue.Team,
    88  			&issue.Kind,
    89  			&issue.Area,
    90  			&issue.MilestoneNumber,
    91  		)
    92  		if err != nil {
    93  			log.Fatal(err)
    94  		}
    95  		table.Issues = append(table.Issues, issue)
    96  	}
    97  	if err := rows.Err(); err != nil {
    98  		return err
    99  	}
   100  
   101  	sort.Slice(table.Issues, func(i, j int) bool {
   102  		return table.Issues[i].Number < table.Issues[j].Number
   103  	})
   104  
   105  	return nil
   106  }
   107  

View as plain text