Connor McCutcheon
/ SkyLab
main.go
go
package main
import (
	"embed"
	"io/fs"
	"log"
	"net/http"
	"time"
	"theskyscape.com/repo/skykit"
	"theskyscape.com/repo/skylab/controllers"
	"theskyscape.com/repo/skylab/models"
)
//go:embed all:views
var views embed.FS
func main() {
	log.Println("Starting SkyLab on http://localhost:5000")
	// Ensure workspace root directory exists
	if err := models.EnsureWorkspaceRoot(); err != nil {
		log.Printf("Warning: failed to create workspace root: %v", err)
	}
	// Start session cleanup goroutine (every 5 minutes)
	go func() {
		for {
			time.Sleep(5 * time.Minute)
			models.CleanupStaleSessions()
		}
	}()
	// Start kernel cleanup goroutine (every 2 minutes)
	go func() {
		for {
			time.Sleep(2 * time.Minute)
			models.CleanupIdleKernels()
		}
	}()
	// Serve public files from views/public
	if _, err := fs.Sub(views, "views/public"); err == nil {
		public, _ := fs.Sub(views, "views")
		http.Handle("GET /public/", http.FileServerFS(public))
		log.Println("Serving public files at /public/")
	}
	skykit.Serve(views,
		skykit.WithController(controllers.Notebooks()),
		skykit.WithController(controllers.Kernel()),
		skykit.WithController(controllers.Gallery()),
	)
}
No comments yet.