aboutsummaryrefslogtreecommitdiff
path: root/bin/ak-zblock
blob: 2292cecda4eed6631af8d16bcea74af5e083ddef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env bash
###
### arching-kaos-tools
### Tools to interact and build an Arching Kaos Infochain
### Copyright (C) 2021 - 2025  kaotisk
###
### This program is free software: you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation, either version 3 of the License, or
### (at your option) any later version.
###
### This program is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with this program.  If not, see <http://www.gnu.org/licenses/>.
###
##
## Performs various operations on a zblock. Additionally, it can also pack one
## from given information, which can be added on top of your zchain.
##
## Usage:
##    -h, --help                             Prints this help message
##    -s, --show [zblock]                    Shows the zblock provided. In case
##                                           of no zblock, the latest of your
##                                           zchain is shown.
##    -x, --gen-html <zblock>                Generates an HTML document for a
##                                           given zblock
##    -c, --cache                            Caches a zblock
##    -p, --pack <module/action> <hash>      Packs a zblock
##    -r, --repack <zblock> <previous>       Repacks a zblock at previous
##    -a, --announce                         Announces a zblock
##
fullprogrampath="$(realpath $0)"
PROGRAM=$(basename $0)
descriptionString="Various zblock operations"

# At least these
source $AK_LIBDIR/_ak_log
source $AK_LIBDIR/_ak_script
source $AK_LIBDIR/_ak_zblock

# Flags to run
if [ ! -z $1 ]; then
    case $1 in
        -h | --help) _ak_usage; exit;;
        -s | --show)
            _ak_zblock_show $2
            exit
            ;;
        -x | --gen-html)
            _ak_zblock_gen_html $2
            exit
            ;;
        -c | --cache)
            _ak_zblock_cache $2
            exit
            ;;
        -p | --pack)
            _ak_zblock_pack $2 $3
            exit
            ;;
        -r | --repack)
            _ak_zblock_repack $2 $3
            exit
            ;;
        -a | --announce)
            _ak_zblock_announce $2
            exit
            ;;
        * ) _ak_usage;;
    esac
else _ak_usage
fi
ref='#n165'>165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
#!/usr/bin/env bash
###
### arching-kaos-tools
### Tools to interact and build an Arching Kaos Infochain
### Copyright (C) 2021 - 2025  kaotisk
###
### This program is free software: you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation, either version 3 of the License, or
### (at your option) any later version.
###
### This program is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with this program.  If not, see <http://www.gnu.org/licenses/>.
###

source $AK_LIBDIR/_ak_utils 2>/dev/null || source ./lib/_ak_utils 2>/dev/null

export AK_LOGSDIR="$AK_WORKDIR/logs"
export AK_LOGSFILE="$AK_LOGSDIR/log"
export AK_LOGTOFILE="no"
if [ -d $AK_SETTINGS ]
then
    if [ ! -d $AK_SETTINGS/logging ]
    then
        mkdir -p $AK_SETTINGS/logging
    fi
    if [ -f $AK_SETTINGS/logging/logToFile ]
    then
        export AK_LOGTOFILE="$(cat $AK_SETTINGS/logging/logToFile)"
    else
        echo -n $AK_LOGTOFILE > $AK_SETTINGS/logging/logToFile
    fi
fi

if [ -n "${AK_WORKDIR}" ] && [ -d "${AK_WORKDIR}" ]
then
    if [ ! -d $AK_LOGSDIR ]
    then
        if [ -f $AK_LOGSDIR ]
        then
            TEMP="$(mktemp)"
            mv $AK_LOGSDIR $TEMP
            mkdir -p $AK_LOGSDIR
            mv $TEMP $AK_LOGSFILE
            _ak_log_info 'Migration of logs was successful!'
        else
            mkdir -p $AK_LOGSDIR
            touch $AK_LOGSFILE
            _ak_log_info 'Update was successful!'
        fi
    fi
else
    printf "Can't find AK_WORKDIR to work upon.\n"
    exit 1
fi

function _ak_log_print_log_line(){
    if [ -n "$1" ]
    then
        timestamp="$(echo "$*" | awk '{print $1}')"
        program="$(echo "$*" | awk '{print $2}')"
        messagetype="$(echo "$*" | awk '{print $3}')"
        message="$(echo "$*" | cut -d ' ' -f4-)"
        printf '%s \033[1;32m%s\033[0;00m \033[1;31m%s\033[0;00m %s\n' \
            "$(_ak_datetime_unix_to_human $timestamp)" \
            "$program" \
            "$messagetype" \
            "$message"
    fi
}

function _ak_log_follow(){
    tail -f $AK_LOGSFILE | while read -r p || [ -n "$p" ]
    do
        _ak_log_print_log_line "$p"
    done
}

function _ak_log_grep(){
    if [ ! -z $1 ] && [ -n "$1" ]
    then
        if [ "$1" == "-h" ] || [ "$1" == "--help" ]
        then
            description
            echo "Launch with no arguments and select from the menu that will appear"
            exit 1
        fi
    fi
    echo "The following scripts have entries in the log file."
    echo "Select one of those by entering the number of it below and hit enter:"
    select x in $(cat $AK_LOGSFILE | cut -d ' ' -f 2 | sort | uniq)
    do
        grep $x $AK_LOGSFILE | while read line
        do
            _ak_log_print_log_line "$line"
        done
        break
    done
}

function _ak_log_rotate(){
    cd $AK_LOGSDIR
    if [ -f $AK_LOGSFILE ]
    then
        gzip -c log > $(_ak_datetime_unix)_log.gz
        cat /dev/null > log
    fi
    if [ -f $AK_LOGSDIR/akd.log ]
    then
        gzip -c akd.log > $(_ak_datetime_unix)_akd-log.gz
        cat /dev/null > akd.log
    fi
}

function _ak_log_message(){
    TS="$(_ak_datetime_unix)"
    if [ ! -z $1 ] && [ -n "$1" ]
    then
        prg="$1"
        shift
        if [ ! -z "$1" ] && [ -n "$1" ]
        then
            tp="$1"
            shift
            if [ ! -z "$*" ] && [ -n "$*" ]
            then
                msg="$*"
                if [ ! -z $AK_LOGTOFILE ] && [ -n "$AK_LOGTOFILE" ] && [ "$AK_LOGTOFILE" == "yes" ]
                then
                    echo "$TS" "<$prg>" "[$tp]" "$msg" >> $AK_LOGSFILE
                fi
                if [ ! -z $AK_DEBUG ] && [ -n "$AK_DEBUG" ] && [ "$AK_DEBUG" == "yes" ]
                then
                    _ak_log_print_log_line "$TS <$prg> [$tp] $msg" >&2
                fi
            else
                    echo "$TS" "<$prg>" "[ERROR]" "No message" >> $AK_LOGSFILE
                if [ "$AK_DEBUG" == "yes" ]
                then
                    echo "$TS" "<$prg>" "[ERROR]" "No message" >&2
                fi
                return 1
            fi
        else
            if [ ! -z $AK_LOGTOFILE ] && [ -n "$AK_LOGTOFILE" ] && [ "$AK_LOGTOFILE" == "yes" ]
            then
                echo "$TS" "<$prg>" "[ERROR]" "No type and message" >> $AK_LOGSFILE
            fi
            if [ "$AK_DEBUG" == "yes" ]
            then
                echo "$TS" "<$prg>" "[ERROR]" "No type and message" >&2
            fi
            return 1
        fi
    else
        if [ ! -z $AK_LOGTOFILE ] && [ -n "$AK_LOGTOFILE" ] && [ "$AK_LOGTOFILE" == "yes" ]
        then
            echo "$TS" "<$(basename $0)>" "[ERROR]" "No arguments given" >> $AK_LOGSFILE
        fi
        if [ "$AK_DEBUG" == "yes" ]
        then
            echo "$TS" "<$(basename $0)>" "[ERROR]" "No arguments given" >&2
        fi
        return 1
    fi
}

function _ak_log_exit(){
    _ak_log_message "$PROGRAM" "EXIT" "$*"
}

function _ak_log_warning(){
    _ak_log_message "$PROGRAM" "WARNING" "$*"
}

function _ak_log_debug(){
    _ak_log_message "$PROGRAM" "DEBUG" "$*"
}

function _ak_log_error(){
    _ak_log_message "$PROGRAM" "ERROR" "$*"
}

function _ak_log_info(){
    _ak_log_message "$PROGRAM" "INFO" "$*"
}

# vim: set syntax=bash