mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 18:35:51 +02:00
change work dir
This commit is contained in:
parent
b37c1e8eac
commit
ad421905a8
17 changed files with 231 additions and 618 deletions
|
@ -3,7 +3,7 @@ package api
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/0xJacky/Nginx-UI/tool"
|
"github.com/0xJacky/Nginx-UI/server/tool"
|
||||||
"github.com/dustin/go-humanize"
|
"github.com/dustin/go-humanize"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package api
|
||||||
import (
|
import (
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/0xJacky/Nginx-UI/model"
|
"github.com/0xJacky/Nginx-UI/server/model"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/0xJacky/Nginx-UI/model"
|
"github.com/0xJacky/Nginx-UI/server/model"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/unknwon/com"
|
"github.com/unknwon/com"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -21,4 +21,4 @@ func GetFileBackup(c *gin.Context) {
|
||||||
backup := model.GetBackup(com.StrTo(id).MustInt())
|
backup := model.GetBackup(com.StrTo(id).MustInt())
|
||||||
|
|
||||||
c.JSON(http.StatusOK, backup)
|
c.JSON(http.StatusOK, backup)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,183 +1,182 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/0xJacky/Nginx-UI/tool"
|
"github.com/0xJacky/Nginx-UI/server/tool"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CertInfo(c *gin.Context) {
|
func CertInfo(c *gin.Context) {
|
||||||
domain := c.Param("domain")
|
domain := c.Param("domain")
|
||||||
|
|
||||||
/*sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain +"/fullchain.cer")
|
/*sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain +"/fullchain.cer")
|
||||||
|
|
||||||
content, err := ioutil.ReadFile(sslCertificatePath)
|
content, err := ioutil.ReadFile(sslCertificatePath)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrorHandler(c, err)
|
ErrorHandler(c, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
certDERBlock, _ := pem.Decode(content)
|
certDERBlock, _ := pem.Decode(content)
|
||||||
|
|
||||||
if certDERBlock == nil {
|
if certDERBlock == nil {
|
||||||
ErrorHandler(c, errors.New("pem decode error"))
|
ErrorHandler(c, errors.New("pem decode error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var key *x509.Certificate
|
var key *x509.Certificate
|
||||||
key, err = x509.ParseCertificate(certDERBlock.Bytes)
|
key, err = x509.ParseCertificate(certDERBlock.Bytes)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrorHandler(c, err)
|
ErrorHandler(c, err)
|
||||||
return
|
return
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
ts := &http.Transport{
|
ts := &http.Transport{
|
||||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||||
}
|
}
|
||||||
|
|
||||||
client := &http.Client{Transport: ts}
|
client := &http.Client{Transport: ts}
|
||||||
|
|
||||||
response, err := client.Get("https://" + domain)
|
response, err := client.Get("https://" + domain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrorHandler(c, err)
|
ErrorHandler(c, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer func(Body io.ReadCloser) {
|
defer func(Body io.ReadCloser) {
|
||||||
err = Body.Close()
|
err = Body.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrorHandler(c, err)
|
ErrorHandler(c, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}(response.Body)
|
}(response.Body)
|
||||||
|
|
||||||
key := response.TLS.PeerCertificates[0]
|
key := response.TLS.PeerCertificates[0]
|
||||||
|
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"subject_name": key.Subject.CommonName,
|
"subject_name": key.Subject.CommonName,
|
||||||
"issuer_name": key.Issuer.CommonName,
|
"issuer_name": key.Issuer.CommonName,
|
||||||
"not_after": key.NotAfter,
|
"not_after": key.NotAfter,
|
||||||
"not_before": key.NotBefore,
|
"not_before": key.NotBefore,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func IssueCert(c *gin.Context) {
|
func IssueCert(c *gin.Context) {
|
||||||
domain := c.Param("domain")
|
domain := c.Param("domain")
|
||||||
|
|
||||||
// upgrade http to websocket
|
// upgrade http to websocket
|
||||||
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
|
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
defer ws.Close()
|
defer ws.Close()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
// read
|
// read
|
||||||
mt, message, err := ws.ReadMessage()
|
mt, message, err := ws.ReadMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if string(message) == "go" {
|
if string(message) == "go" {
|
||||||
var m []byte
|
var m []byte
|
||||||
|
|
||||||
err = tool.IssueCert(domain)
|
err = tool.IssueCert(domain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
m, err = json.Marshal(gin.H{
|
m, err = json.Marshal(gin.H{
|
||||||
"status": "error",
|
"status": "error",
|
||||||
"message": err.Error(),
|
"message": err.Error(),
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ws.WriteMessage(mt, m)
|
err = ws.WriteMessage(mt, m)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
|
sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
|
||||||
_, err = os.Stat(sslCertificatePath)
|
_, err = os.Stat(sslCertificatePath)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("[found]", "fullchain.cer")
|
log.Println("[found]", "fullchain.cer")
|
||||||
m, err = json.Marshal(gin.H{
|
m, err = json.Marshal(gin.H{
|
||||||
"status": "success",
|
"status": "success",
|
||||||
"message": "[found] fullchain.cer",
|
"message": "[found] fullchain.cer",
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ws.WriteMessage(mt, m)
|
err = ws.WriteMessage(mt, m)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sslCertificateKeyPath := tool.GetNginxConfPath("ssl/" + domain +"/" + domain + ".key")
|
sslCertificateKeyPath := tool.GetNginxConfPath("ssl/" + domain + "/" + domain + ".key")
|
||||||
_, err = os.Stat(sslCertificateKeyPath)
|
_, err = os.Stat(sslCertificateKeyPath)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("[found]", "cert key")
|
log.Println("[found]", "cert key")
|
||||||
m, err = json.Marshal(gin.H{
|
m, err = json.Marshal(gin.H{
|
||||||
"status": "success",
|
"status": "success",
|
||||||
"message": "[found] cert key",
|
"message": "[found] cert key",
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ws.WriteMessage(mt, m)
|
err = ws.WriteMessage(mt, m)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("申请成功")
|
log.Println("申请成功")
|
||||||
m, err = json.Marshal(gin.H{
|
m, err = json.Marshal(gin.H{
|
||||||
"status": "success",
|
"status": "success",
|
||||||
"message": "申请成功",
|
"message": "申请成功",
|
||||||
"ssl_certificate": sslCertificatePath,
|
"ssl_certificate": sslCertificatePath,
|
||||||
"ssl_certificate_key": sslCertificateKeyPath,
|
"ssl_certificate_key": sslCertificateKeyPath,
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ws.WriteMessage(mt, m)
|
err = ws.WriteMessage(mt, m)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/0xJacky/Nginx-UI/tool"
|
"github.com/0xJacky/Nginx-UI/server/tool"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/0xJacky/Nginx-UI/tool"
|
"github.com/0xJacky/Nginx-UI/server/tool"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/0xJacky/Nginx-UI/settings"
|
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
|
@ -1,25 +1,16 @@
|
||||||
module github.com/0xJacky/Nginx-UI
|
module github.com/0xJacky/Nginx-UI/server
|
||||||
|
|
||||||
go 1.15
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||||
github.com/dustin/go-humanize v1.0.0
|
github.com/dustin/go-humanize v1.0.0
|
||||||
github.com/gin-gonic/gin v1.7.2
|
github.com/gin-gonic/gin v1.7.4
|
||||||
github.com/go-acme/lego/v4 v4.4.0
|
github.com/go-acme/lego/v4 v4.4.0
|
||||||
github.com/go-playground/validator/v10 v10.7.0 // indirect
|
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
|
||||||
github.com/gorilla/websocket v1.4.2
|
github.com/gorilla/websocket v1.4.2
|
||||||
github.com/json-iterator/go v1.1.11 // indirect
|
github.com/mackerelio/go-osstat v0.2.0
|
||||||
github.com/leodido/go-urn v1.2.1 // indirect
|
|
||||||
github.com/mackerelio/go-osstat v0.1.0
|
|
||||||
github.com/mattn/go-isatty v0.0.13 // indirect
|
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
|
|
||||||
github.com/minio/minio v0.0.0-20210316030313-6160188bf32a
|
|
||||||
github.com/unknwon/com v1.0.1
|
github.com/unknwon/com v1.0.1
|
||||||
golang.org/x/sys v0.0.0-20210217105451-b926d437f341 // indirect
|
|
||||||
golang.org/x/text v0.3.6 // indirect
|
|
||||||
gopkg.in/ini.v1 v1.62.0
|
gopkg.in/ini.v1 v1.62.0
|
||||||
gorm.io/driver/sqlite v1.1.4
|
gorm.io/driver/sqlite v1.1.4
|
||||||
gorm.io/gorm v1.20.12
|
gorm.io/gorm v1.21.14
|
||||||
)
|
)
|
||||||
|
|
422
server/go.sum
422
server/go.sum
File diff suppressed because it is too large
Load diff
|
@ -1,10 +1,10 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/0xJacky/Nginx-UI/model"
|
"github.com/0xJacky/Nginx-UI/server/model"
|
||||||
"github.com/0xJacky/Nginx-UI/router"
|
"github.com/0xJacky/Nginx-UI/server/router"
|
||||||
"github.com/0xJacky/Nginx-UI/settings"
|
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||||
"github.com/0xJacky/Nginx-UI/tool"
|
"github.com/0xJacky/Nginx-UI/server/tool"
|
||||||
"log"
|
"log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/0xJacky/Nginx-UI/settings"
|
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||||
"github.com/dgrijalva/jwt-go"
|
"github.com/dgrijalva/jwt-go"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,8 +2,8 @@ package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"github.com/0xJacky/Nginx-UI/api"
|
"github.com/0xJacky/Nginx-UI/server/api"
|
||||||
"github.com/0xJacky/Nginx-UI/model"
|
"github.com/0xJacky/Nginx-UI/server/model"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,7 +2,7 @@ package test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/0xJacky/Nginx-UI/tool"
|
"github.com/0xJacky/Nginx-UI/server/tool"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
|
@ -1,62 +1,62 @@
|
||||||
package test
|
package test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
humanize "github.com/dustin/go-humanize"
|
humanize "github.com/dustin/go-humanize"
|
||||||
"github.com/mackerelio/go-osstat/cpu"
|
"github.com/mackerelio/go-osstat/cpu"
|
||||||
"github.com/mackerelio/go-osstat/memory"
|
"github.com/mackerelio/go-osstat/disk"
|
||||||
"github.com/minio/minio/pkg/disk"
|
"github.com/mackerelio/go-osstat/memory"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGetArch(t *testing.T) {
|
func TestGetArch(t *testing.T) {
|
||||||
fmt.Println("os:", runtime.GOOS)
|
fmt.Println("os:", runtime.GOOS)
|
||||||
fmt.Println("threads:", runtime.GOMAXPROCS(0))
|
fmt.Println("threads:", runtime.GOMAXPROCS(0))
|
||||||
|
|
||||||
memoryStat, err := memory.Get()
|
memoryStat, err := memory.Get()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "%s\n", err)
|
fmt.Fprintf(os.Stderr, "%s\n", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Println("memory total:", humanize.Bytes(memoryStat.Total))
|
fmt.Println("memory total:", humanize.Bytes(memoryStat.Total))
|
||||||
fmt.Println("memory used:", humanize.Bytes(memoryStat.Used))
|
fmt.Println("memory used:", humanize.Bytes(memoryStat.Used))
|
||||||
fmt.Println("memory cached:", humanize.Bytes(memoryStat.Cached))
|
fmt.Println("memory cached:", humanize.Bytes(memoryStat.Cached))
|
||||||
fmt.Println("memory free:", humanize.Bytes(memoryStat.Free))
|
fmt.Println("memory free:", humanize.Bytes(memoryStat.Free))
|
||||||
|
|
||||||
before, err := cpu.Get()
|
before, err := cpu.Get()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
time.Sleep(time.Duration(1) * time.Second)
|
time.Sleep(time.Duration(1) * time.Second)
|
||||||
after, err := cpu.Get()
|
after, err := cpu.Get()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
total := float64(after.Total - before.Total)
|
total := float64(after.Total - before.Total)
|
||||||
fmt.Printf("cpu user: %f %%\n", float64(after.User-before.User)/total*100)
|
fmt.Printf("cpu user: %f %%\n", float64(after.User-before.User)/total*100)
|
||||||
fmt.Printf("cpu system: %f %%\n", float64(after.System-before.System)/total*100)
|
fmt.Printf("cpu system: %f %%\n", float64(after.System-before.System)/total*100)
|
||||||
fmt.Printf("cpu idle: %f %%\n", float64(after.Idle-before.Idle)/total*100)
|
fmt.Printf("cpu idle: %f %%\n", float64(after.Idle-before.Idle)/total*100)
|
||||||
|
|
||||||
err = diskUsage(".")
|
err = diskUsage(".")
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func diskUsage(path string) error {
|
func diskUsage(path string) error {
|
||||||
di, err := disk.GetInfo(path)
|
di, err := disk.GetInfo(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100
|
percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100
|
||||||
fmt.Printf("%s of %s disk space used (%0.2f%%)\n",
|
fmt.Printf("%s of %s disk space used (%0.2f%%)\n",
|
||||||
humanize.Bytes(di.Total-di.Free),
|
humanize.Bytes(di.Total-di.Free),
|
||||||
humanize.Bytes(di.Total),
|
humanize.Bytes(di.Total),
|
||||||
percentage,
|
percentage,
|
||||||
)
|
)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/0xJacky/Nginx-UI/tool"
|
"github.com/0xJacky/Nginx-UI/server/tool"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package tool
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/dustin/go-humanize"
|
"github.com/dustin/go-humanize"
|
||||||
"github.com/minio/minio/pkg/disk"
|
"github.com/mackerelio/go-osstat/disk"
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ func DiskUsage(path string) (string, string, float64, error) {
|
||||||
}
|
}
|
||||||
percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100
|
percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100
|
||||||
percentage, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", percentage), 64)
|
percentage, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", percentage), 64)
|
||||||
|
|
||||||
return humanize.Bytes(di.Total-di.Free), humanize.Bytes(di.Total),
|
return humanize.Bytes(di.Total-di.Free), humanize.Bytes(di.Total),
|
||||||
percentage, nil
|
percentage, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"crypto/elliptic"
|
"crypto/elliptic"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"github.com/0xJacky/Nginx-UI/settings"
|
"github.com/0xJacky/Nginx-UI/server/settings"
|
||||||
"github.com/go-acme/lego/v4/certcrypto"
|
"github.com/go-acme/lego/v4/certcrypto"
|
||||||
"github.com/go-acme/lego/v4/certificate"
|
"github.com/go-acme/lego/v4/certificate"
|
||||||
"github.com/go-acme/lego/v4/challenge/http01"
|
"github.com/go-acme/lego/v4/challenge/http01"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue