Skip to content

Commit

Permalink
Merge pull request #131 from TrueBlocks/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
tjayrush authored Sep 25, 2024
2 parents cf6685b + b5a16c3 commit a877ffc
Show file tree
Hide file tree
Showing 13 changed files with 184 additions and 58 deletions.
60 changes: 37 additions & 23 deletions app/proc_daemons.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,42 +12,56 @@ func (a *App) startDaemons() {
go a.IpfsController.Run()
}

func (a *App) GetDaemon(name string) *daemons.Daemon {
func (a *App) GetDaemonJson(name string) string {
d := a.getDaemon(name)
if d == nil {
return "{}"
}
return d.String()
}

func (a *App) ToggleDaemon(name string) error {
if s := a.getDaemon(name); s == nil {
return fmt.Errorf("could not find daemon %s", name)
} else {
if err := s.Toggle(); err != nil {
return err
}
a.SetLastDaemon("daemon-"+name, s.IsRunning())
return nil
}
}

func (a *App) StateToString(name string) string {
if s := a.getDaemon2(name); s == nil {
return "Daemon not found"
} else {
return s.GetState().String()
}
}

func (a *App) getDaemon2(name string) daemons.Daemoner {
switch name {
case "freshen":
return &a.FreshenController.Daemon
return a.FreshenController
case "scraper":
return &a.ScraperController.Daemon
return a.ScraperController
case "ipfs":
return &a.IpfsController.Daemon
return a.IpfsController
default:
return nil
}
}

func (a *App) ToggleDaemon(name string) error {
func (a *App) getDaemon(name string) *daemons.Daemon {
switch name {
case "freshen":
err := a.FreshenController.Toggle()
a.SetLastDaemon("daemon-freshen", a.FreshenController.State == daemons.Running)
return err
return &a.FreshenController.Daemon
case "scraper":
err := a.ScraperController.Toggle()
a.SetLastDaemon("daemon-scraper", a.FreshenController.State == daemons.Running)
return err
return &a.ScraperController.Daemon
case "ipfs":
err := a.IpfsController.Toggle()
a.SetLastDaemon("daemon-ipfs", a.FreshenController.State == daemons.Running)
return err
return &a.IpfsController.Daemon
default:
return fmt.Errorf("daemon %s not found in ToggleDaemon", name)
}
}

func (a *App) StateToString(name string) string {
s := a.GetDaemon(name)
if s == nil {
return "Daemon not found"
return nil
}
return s.State.String()
}
3 changes: 1 addition & 2 deletions app/proc_refresh.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"sync/atomic"
"time"

"github.com/TrueBlocks/trueblocks-browse/pkg/daemons"
"github.com/TrueBlocks/trueblocks-browse/pkg/messages"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/colors"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger"
Expand All @@ -28,7 +27,7 @@ func (a *App) Refresh(which ...string) {
}
defer freshenLock.CompareAndSwap(1, 0)

if a.ScraperController.State != daemons.Running {
if !a.ScraperController.IsRunning() {
logger.Info(colors.Green, "Freshening...", colors.Off)
}

Expand Down
6 changes: 3 additions & 3 deletions frontend/src/views/Daemons/DaemonCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ import { daemons } from "@gocode/models";

export const DaemonCard = ({ daemon, toggle }: { daemon: daemons.Daemon; toggle: (name: string) => void }) => {
const [stateStr, setStateStr] = useState<string>("");
const { name, sleep, started, color, ticks, state } = daemon;
const { name, sleep, started, color, ticks } = daemon;

useEffect(() => {
StateToString(name).then((s) => {
setStateStr(s);
});
}, [state]);
}, [name, daemon]);

const handleToggle = () => {
toggle(name);
Expand All @@ -24,7 +24,7 @@ export const DaemonCard = ({ daemon, toggle }: { daemon: daemons.Daemon; toggle:
{name}
</Title>
<div onClick={handleToggle} style={{ cursor: "pointer" }}>
<Badge bg={state === daemons.State.RUNNING ? "green" : "red"}>{stateStr}</Badge>
<Badge bg={stateStr === daemons.State.RUNNING ? "green" : "red"}>{stateStr}</Badge>
</div>
</Group>
<Text size="sm">Sleep Duration: {sleep}</Text>
Expand Down
11 changes: 6 additions & 5 deletions frontend/src/views/Daemons/DaemonsView.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useState, useEffect, Dispatch, SetStateAction } from "react";
import { SimpleGrid, Fieldset } from "@mantine/core";
import { View } from "@components";
import { GetDaemon, ToggleDaemon } from "@gocode/app/App";
import { GetDaemonJson, ToggleDaemon } from "@gocode/app/App";
import { daemons, messages } from "@gocode/models";
import { EventsOn, EventsOff } from "@runtime";
import { ViewStateProvider } from "@state";
Expand All @@ -15,9 +15,10 @@ export function DaemonsView() {
const [ipfs, setIpfs] = useState<daemons.Daemon>(empty);
const [logMessages, setLogMessages] = useState<messages.DaemonMsg[]>([]);

const updateDaemon = (daemon: string, setStateFn: Dispatch<SetStateAction<daemons.Daemon>>) => {
GetDaemon(daemon).then((s) => {
setStateFn(s);
const updateDaemon = (daemon: string, setDaemon: Dispatch<SetStateAction<daemons.Daemon>>) => {
GetDaemonJson(daemon).then((jsonStr: string) => {
const d = daemons.Daemon.createFrom(jsonStr);
setDaemon(d);
});
};

Expand Down Expand Up @@ -53,7 +54,7 @@ export function DaemonsView() {
return () => {
EventsOff(Message.DAEMON);
};
}, []);
});

const toggleDaemon = (name: string) => {
ToggleDaemon(name);
Expand Down
3 changes: 1 addition & 2 deletions frontend/wailsjs/go/app/App.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {types} from '../models';
import {base} from '../models';
import {menu} from '../models';
import {context} from '../models';
import {daemons} from '../models';
import {wizard} from '../models';
import {config} from '../models';
import {output} from '../models';
Expand Down Expand Up @@ -33,7 +32,7 @@ export function FileSaveAs(arg1:menu.CallbackData):Promise<void>;

export function GetContext():Promise<context.Context>;

export function GetDaemon(arg1:string):Promise<daemons.Daemon>;
export function GetDaemonJson(arg1:string):Promise<string>;

export function GetDalle():Promise<string>;

Expand Down
4 changes: 2 additions & 2 deletions frontend/wailsjs/go/app/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ export function GetContext() {
return window['go']['app']['App']['GetContext']();
}

export function GetDaemon(arg1) {
return window['go']['app']['App']['GetDaemon'](arg1);
export function GetDaemonJson(arg1) {
return window['go']['app']['App']['GetDaemonJson'](arg1);
}

export function GetDalle() {
Expand Down
9 changes: 9 additions & 0 deletions frontend/wailsjs/go/daemons/Daemon.d.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
import {daemons} from '../models';

export function GetState():Promise<daemons.State>;

export function Instance():Promise<daemons.Daemon>;

export function IsRunning():Promise<boolean>;

export function Pause():Promise<void>;

export function Run():Promise<void>;

export function Stop():Promise<void>;

export function String():Promise<string>;

export function Tick(arg1:Array<string>):Promise<number>;

export function Toggle():Promise<void>;
16 changes: 16 additions & 0 deletions frontend/wailsjs/go/daemons/Daemon.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT

export function GetState() {
return window['go']['daemons']['Daemon']['GetState']();
}

export function Instance() {
return window['go']['daemons']['Daemon']['Instance']();
}

export function IsRunning() {
return window['go']['daemons']['Daemon']['IsRunning']();
}

export function Pause() {
return window['go']['daemons']['Daemon']['Pause']();
}
Expand All @@ -14,6 +26,10 @@ export function Stop() {
return window['go']['daemons']['Daemon']['Stop']();
}

export function String() {
return window['go']['daemons']['Daemon']['String']();
}

export function Tick(arg1) {
return window['go']['daemons']['Daemon']['Tick'](arg1);
}
Expand Down
12 changes: 6 additions & 6 deletions frontend/wailsjs/go/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1693,12 +1693,6 @@ export namespace types {

export namespace wizard {

export enum Step {
RESET = "Reset",
PREVIOUS = "Previous",
NEXT = "Next",
FINISH = "Finish",
}
export enum State {
NOTOKAY = "notOkay",
TOMLOKAY = "tomlOkay",
Expand All @@ -1707,6 +1701,12 @@ export namespace wizard {
INDEXOKAY = "indexOkay",
OKAY = "okay",
}
export enum Step {
RESET = "Reset",
PREVIOUS = "Previous",
NEXT = "Next",
FINISH = "Finish",
}
export class Wizard {
state: State;

Expand Down
40 changes: 31 additions & 9 deletions pkg/daemons/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package daemons

import (
"context"
"encoding/json"
"fmt"
"strings"
"time"
Expand All @@ -14,6 +15,17 @@ type Freshener interface {
GetContext() context.Context
}

type Daemoner interface {
Run()
Stop() error
Pause() error
Tick(msg ...string) int
IsRunning() bool
String() string
GetState() State
Toggle() error
}

type Daemon struct {
Name string `json:"name"`
Sleep time.Duration `json:"sleep"`
Expand All @@ -24,10 +36,18 @@ type Daemon struct {
freshener Freshener
}

func (s *Daemon) Run() error {
func (s *Daemon) String() string {
bytes, _ := json.Marshal(s)
return string(bytes)
}

func (s *Daemon) Instance() *Daemon {
return &Daemon{}
}

func (s *Daemon) Run() {
s.State = Running
s.Tick("Run")
return nil
}

func (s *Daemon) Stop() error {
Expand All @@ -43,10 +63,11 @@ func (s *Daemon) Pause() error {
}

func (s *Daemon) Toggle() error {
if s.State == Running {
if s.IsRunning() {
return s.Pause()
}
return s.Run()
s.Run()
return nil
}

func (s *Daemon) Tick(msg ...string) int {
Expand All @@ -66,9 +87,10 @@ func (s *Daemon) Tick(msg ...string) int {
return s.Ticks
}

type Daemoner *interface {
Run() error
Stop() error
Pause() error
Tick(msg ...string) int
func (s *Daemon) IsRunning() bool {
return s.State == Running
}

func (s *Daemon) GetState() State {
return s.State
}
26 changes: 24 additions & 2 deletions pkg/daemons/freshen.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package daemons

import (
"encoding/json"
"time"

"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger"
Expand All @@ -20,25 +21,46 @@ func NewFreshen(freshener Freshener, name string, sleep time.Duration, start boo
Name: name,
Sleep: sleep,
Color: "blue",
State: state,
Started: time.Now(),
State: state,
freshener: freshener,
},
}
}

func (s *DaemonFreshen) String() string {
bytes, _ := json.Marshal(s.Daemon)
return string(bytes)
}

func (s *DaemonFreshen) Run() {
logger.Info("Starting fresheners...")
for {
if s.Daemon.State == Running {
if s.IsRunning() {
s.Tick("Freshen")
}
time.Sleep(s.Sleep * time.Millisecond)
}
}

func (s *DaemonFreshen) Pause() error {
return s.Daemon.Pause()
}

func (s *DaemonFreshen) Toggle() error {
return s.Daemon.Toggle()
}

func (s *DaemonFreshen) Tick(msg ...string) int {
go s.freshener.Refresh()
s.Ticks++
return s.Ticks // we don't use the Daemon's Tick since Freshen notifies if it runs
}

func (s *DaemonFreshen) IsRunning() bool {
return s.Daemon.IsRunning()
}

func (s *DaemonFreshen) GetState() State {
return s.Daemon.GetState()
}
Loading

0 comments on commit a877ffc

Please sign in to comment.