This commit is contained in:
		
							parent
							
								
									ec78765e4f
								
							
						
					
					
						commit
						f7acde85c0
					
				
					 5 changed files with 18 additions and 32 deletions
				
			
		| 
						 | 
					@ -23,11 +23,6 @@ jobs:
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        go-version: '1.23'
 | 
					        go-version: '1.23'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # - name: Install dependencies
 | 
					 | 
				
			||||||
    #   run: |
 | 
					 | 
				
			||||||
    #     sudo apt-get update
 | 
					 | 
				
			||||||
    #     sudo apt-get install -y task
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: Run tests
 | 
					    - name: Run tests
 | 
				
			||||||
      run: task test
 | 
					      run: task test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,16 +30,6 @@ jobs:
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        task build VERSION=${{ github.event.inputs.version }}
 | 
					        task build VERSION=${{ github.event.inputs.version }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # - name: Upload Release Asset
 | 
					 | 
				
			||||||
    #   uses: actions/upload-release-asset@v1
 | 
					 | 
				
			||||||
    #   env:
 | 
					 | 
				
			||||||
    #     GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
					 | 
				
			||||||
    #   with:
 | 
					 | 
				
			||||||
    #     upload_url: ${{ github.event.release.upload_url }}
 | 
					 | 
				
			||||||
    #     asset_path: ./lobby2-${{ github.ref_name }}-amd64
 | 
					 | 
				
			||||||
    #     asset_name: lobby2-${{ github.ref_name }}-amd64
 | 
					 | 
				
			||||||
    #     asset_content_type: application/octet-stream
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - uses: actions/forgejo-release@v2
 | 
					    - uses: actions/forgejo-release@v2
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        token: ${{ secrets.GITHUB_TOKEN }}
 | 
					        token: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,4 +19,4 @@ tasks:
 | 
				
			||||||
    cmds:
 | 
					    cmds:
 | 
				
			||||||
    - go mod tidy
 | 
					    - go mod tidy
 | 
				
			||||||
    - mkdir -p bin
 | 
					    - mkdir -p bin
 | 
				
			||||||
    - go build -o bin/lobby2-{{ .VERSION }}-amd64 cli/*.go
 | 
					    - go build -o bin/lobby2-{{ .VERSION }}-linux-amd64 cli/*.go
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ func masterAction(c *cli.Context) error {
 | 
				
			||||||
func nodeAction(c *cli.Context) error {
 | 
					func nodeAction(c *cli.Context) error {
 | 
				
			||||||
	cfg := GetConfig()
 | 
						cfg := GetConfig()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	r := refresher.NewRefresher(cfg.NodeDirPath, cfg.ConfigPath)
 | 
						r := refresher.NewRefresher(cfg.NodePath, cfg.ConfigPath)
 | 
				
			||||||
	r.Loop()
 | 
						r.Loop()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,9 +10,9 @@ type Config struct {
 | 
				
			||||||
	APIListen string `envconfig:"LISTEN" default:"0.0.0.0:1352"`
 | 
						APIListen string `envconfig:"LISTEN" default:"0.0.0.0:1352"`
 | 
				
			||||||
	APIToken  string `envconfig:"TOKEN" default:""`
 | 
						APIToken  string `envconfig:"TOKEN" default:""`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DumpPath    string `envconfig:"DUMP_PATH" default:"/var/lib/lobby2/nodes.json"`
 | 
						DumpPath   string `envconfig:"DUMP_PATH" default:"/var/lib/lobby2/nodes.json"`
 | 
				
			||||||
	ConfigPath  string `envconfig:"CONFIG_PATH" default:"/var/lib/lobby2/config.json"`
 | 
						ConfigPath string `envconfig:"CONFIG_PATH" default:"/etc/lobby2/config.json"`
 | 
				
			||||||
	NodeDirPath string `envconfig:"NODE_DIR_PATH" default:"/var/lib/lobby2/node"`
 | 
						NodePath   string `envconfig:"NODE_PATH" default:"/etc/lobby2/node.json"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DropAfterSeconds int64 `envconfig:"DROP_AFTER_SECONDS" default:"60"`
 | 
						DropAfterSeconds int64 `envconfig:"DROP_AFTER_SECONDS" default:"60"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,25 +7,24 @@ import (
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path"
 | 
						"path/filepath"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.ceperka.net/rosti/lobby2/nodes"
 | 
						"gitea.ceperka.net/rosti/lobby2/nodes"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const refreshIntervalSeconds = 15
 | 
					const refreshIntervalSeconds = 15
 | 
				
			||||||
const nodeFileName = "node.json"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Refresher loads local node info and sends them to the master node.
 | 
					// Refresher loads local node info and sends them to the master node.
 | 
				
			||||||
type Refresher struct {
 | 
					type Refresher struct {
 | 
				
			||||||
	configPath  string
 | 
						configPath string
 | 
				
			||||||
	nodeDirPath string
 | 
						nodePath   string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewRefresher(nodeDirPath string, configPath string) *Refresher {
 | 
					func NewRefresher(nodePath string, configPath string) *Refresher {
 | 
				
			||||||
	return &Refresher{
 | 
						return &Refresher{
 | 
				
			||||||
		nodeDirPath: nodeDirPath,
 | 
							nodePath:   nodePath,
 | 
				
			||||||
		configPath:  configPath,
 | 
							configPath: configPath,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,7 +112,7 @@ func (r *Refresher) getConfig() (NodeConfig, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO: rewrite this to load Node structure
 | 
					// TODO: rewrite this to load Node structure
 | 
				
			||||||
func (r *Refresher) loadNode() (*nodes.Node, error) {
 | 
					func (r *Refresher) loadNode() (*nodes.Node, error) {
 | 
				
			||||||
	filePath := path.Join(r.nodeDirPath, nodeFileName)
 | 
						filePath := r.nodePath
 | 
				
			||||||
	_, err := os.Stat(filePath)
 | 
						_, err := os.Stat(filePath)
 | 
				
			||||||
	if os.IsNotExist(err) {
 | 
						if os.IsNotExist(err) {
 | 
				
			||||||
		err = r.initNodeFile()
 | 
							err = r.initNodeFile()
 | 
				
			||||||
| 
						 | 
					@ -122,7 +121,7 @@ func (r *Refresher) loadNode() (*nodes.Node, error) {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	content, err := os.ReadFile(path.Join(r.nodeDirPath, nodeFileName))
 | 
						content, err := os.ReadFile(r.nodePath)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, fmt.Errorf("failed to read file: %w", err)
 | 
							return nil, fmt.Errorf("failed to read file: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -156,7 +155,7 @@ func (r *Refresher) initNodeFile() error {
 | 
				
			||||||
		return fmt.Errorf("failed to marshal node: %w", err)
 | 
							return fmt.Errorf("failed to marshal node: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = os.WriteFile(path.Join(r.nodeDirPath, nodeFileName), nodeBytes, 0640)
 | 
						err = os.WriteFile(r.nodePath, nodeBytes, 0640)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("failed to write node file: %w", err)
 | 
							return fmt.Errorf("failed to write node file: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -165,9 +164,11 @@ func (r *Refresher) initNodeFile() error {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *Refresher) createNodePath() error {
 | 
					func (r *Refresher) createNodePath() error {
 | 
				
			||||||
	_, err := os.Stat(r.nodeDirPath)
 | 
						d := filepath.Dir(r.nodePath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err := os.Stat(d)
 | 
				
			||||||
	if os.IsNotExist(err) {
 | 
						if os.IsNotExist(err) {
 | 
				
			||||||
		err = os.MkdirAll(r.nodeDirPath, 0755)
 | 
							err = os.MkdirAll(d, 0755)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return fmt.Errorf("failed to create node dir: %w", err)
 | 
								return fmt.Errorf("failed to create node dir: %w", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue