pgweb/main.go

95 lines
2.0 KiB
Go
Raw Normal View History

2014-10-09 06:26:57 +04:00
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/jessevdk/go-flags"
_ "github.com/lib/pq"
"os"
)
var options struct {
Url string `long:"url" description:"Database connection string"`
2014-10-09 06:26:57 +04:00
Host string `short:"h" long:"host" description:"Server hostname or IP" default:"localhost"`
Port int `short:"p" long:"port" description:"Server port" default:"5432"`
User string `short:"u" long:"user" description:"Database user" default:"postgres"`
DbName string `short:"d" long:"db" description:"Database name" default:"postgres"`
Ssl string `long:"ssl" description:"SSL option" default:"disable"`
Static string `short:"s" description:"Path to static assets" default:"./static"`
2014-10-09 06:26:57 +04:00
}
2014-10-11 02:14:17 +04:00
var dbClient *Client
2014-10-10 09:03:03 +04:00
2014-10-09 06:26:57 +04:00
func getConnectionString() string {
if options.Url != "" {
return options.Url
}
2014-10-09 06:26:57 +04:00
return fmt.Sprintf(
"host=%s port=%d user=%s dbname=%s sslmode=disable",
options.Host, options.Port,
options.User, options.DbName,
)
}
func initClient() {
client, err := NewClient()
if err != nil {
2014-10-11 02:18:19 +04:00
fmt.Println("Error:", err)
os.Exit(1)
2014-10-09 06:26:57 +04:00
}
_, err = client.Query(SQL_INFO)
if err != nil {
2014-10-11 02:18:19 +04:00
fmt.Println("Error:", err)
os.Exit(1)
}
tables, err := client.Tables()
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
if len(tables) == 0 {
fmt.Println("Error: Database does not have any tables")
os.Exit(1)
}
2014-10-09 06:26:57 +04:00
dbClient = client
}
func initOptions() {
_, err := flags.ParseArgs(&options, os.Args)
if err != nil {
2014-10-11 02:20:14 +04:00
os.Exit(1)
2014-10-09 06:26:57 +04:00
}
}
func main() {
initOptions()
initClient()
2014-10-11 02:14:17 +04:00
2014-10-09 06:26:57 +04:00
defer dbClient.db.Close()
router := gin.Default()
2014-10-10 04:05:51 +04:00
2014-10-10 09:03:03 +04:00
router.GET("/info", API_Info)
2014-10-09 06:26:57 +04:00
router.GET("/tables", API_GetTables)
2014-10-11 22:20:16 +04:00
router.GET("/tables/:table", API_GetTable)
router.GET("/tables/:table/indexes", API_TableIndexes)
2014-10-11 02:14:17 +04:00
router.GET("/query", API_RunQuery)
router.POST("/query", API_RunQuery)
2014-10-11 22:24:12 +04:00
router.GET("/explain", API_ExplainQuery)
router.POST("/explain", API_ExplainQuery)
2014-10-10 04:59:18 +04:00
router.GET("/history", API_History)
router.Static("/app", options.Static)
2014-10-10 04:05:51 +04:00
2014-10-09 06:26:57 +04:00
fmt.Println("Starting server at 0.0.0.0:8080")
router.Run(":8080")
}