mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
19.43.2021 8667234fe392524078cbf26e7e57f45d70023458
EmphasizedLogSupport from ProjectForge copied.
1 files added
2 files modified
168 ■■■■■ changed files
borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt 134 ●●●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt 16 ●●●●● patch | view | raw | blame | history
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt 18 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt
New file
@@ -0,0 +1,134 @@
/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2021 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge is dual-licensed.
//
// This community edition 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; version 3 of the License.
//
// This community edition 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/.
//
/////////////////////////////////////////////////////////////////////////////
package de.micromata.borgbutler
import mu.KLogger
import mu.KotlinLogging
import org.apache.commons.lang3.StringUtils
/**
 * Helper for logging very important information and warnings.
 */
class EmphasizedLogSupport @JvmOverloads constructor(
    private val log: KLogger,
    priority: Priority? = Priority.IMPORTANT,
    private val alignment: Alignment = Alignment.CENTER
) {
    private var number = 0
    private val innerLength: Int
    var logLevel = LogLevel.INFO
    private var started = false
    constructor(log: KLogger, alignment: Alignment= Alignment.CENTER) : this(log, Priority.IMPORTANT, alignment)
    enum class Priority {
        NORMAL, IMPORTANT, VERY_IMPORTANT
    }
    enum class Alignment {
        CENTER, LEFT
    }
    enum class LogLevel {
        ERROR, WARN, INFO
    }
    private fun ensureStart() {
        if (!started) {
            started = true
            logStartSeparator()
        }
    }
    /**
     * @return this for chaining.
     */
    private fun logStartSeparator(): EmphasizedLogSupport {
        for (i in 0 until number) {
            logSeparatorLine()
        }
        return log("")
    }
    /**
     * @return this for chaining.
     */
    fun logEnd(): EmphasizedLogSupport {
        ensureStart()
        log("")
        for (i in 0 until number) {
            logSeparatorLine()
        }
        return this
    }
    private fun logSeparatorLine() {
        logLine(StringUtils.rightPad("", innerLength, '*') + asterisks(number * 2 + 2))
    }
    fun log(text: String?): EmphasizedLogSupport {
        ensureStart()
        if (text?.contains("\n") == true) {
            for (line in StringUtils.splitPreserveAllTokens(text, '\n')) {
                logLineText(line)
            }
        } else {
            logLineText(text)
        }
        return this
    }
    private fun logLineText(line: String?) {
        val padText = if (alignment == Alignment.LEFT)
            StringUtils.rightPad(line, innerLength)
        else
            StringUtils.center(line, innerLength)
        logLine(asterisks(number) + " " + padText + " " + asterisks(number))
    }
    private fun logLine(msg: String) {
        if (logLevel == LogLevel.ERROR) log.error(msg) else if (logLevel == LogLevel.WARN) log.warn(msg) else log.info(
            msg
        )
    }
    companion object {
        private const val CONSOLE_LENGTH = 120
        private fun asterisks(number: Int): String {
            return StringUtils.rightPad("*", number, '*')
        }
    }
    init {
        when (priority) {
            Priority.NORMAL -> number = 1
            Priority.VERY_IMPORTANT -> {
                number = 5
                logLevel = LogLevel.WARN
            }
            else -> number = 2
        }
        innerLength = CONSOLE_LENGTH - 2 * number
    }
}
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
@@ -1,5 +1,6 @@
package de.micromata.borgbutler.server
import de.micromata.borgbutler.EmphasizedLogSupport
import de.micromata.borgbutler.cache.ButlerCache
import de.micromata.borgbutler.config.ConfigurationHandler
import de.micromata.borgbutler.config.ConfigurationHandler.Companion.init
@@ -119,23 +120,26 @@
            }
            val uri = URI.create(url)
            val quietMode = line.hasOption('q')
            val emphasizedLog = EmphasizedLogSupport(log)
            if (!quietMode && RunningMode.desktopSupportsBrowse) {
                try {
                    log.info { "Trying to open your local web browser: $uri" }
                    emphasizedLog.log("Trying to open your local web browser: $uri")
                    Desktop.getDesktop().browse(uri)
                } catch (ex: Exception) {
                    log.info("Can't open web browser: " + ex.message, ex)
                    log.info("Desktop not available. Please open your browser manually: $uri")
                    emphasizedLog.logLevel = EmphasizedLogSupport.LogLevel.ERROR
                    emphasizedLog.log("Can't open web browser: " + ex.message)
                    emphasizedLog.log("Desktop not available. Please open your browser manually: $uri")
                }
            } else {
                if (quietMode) {
                    log.info("Server started in quiet mode (option -q). Please open your browser manually: $uri")
                    emphasizedLog.log("Server started in quiet mode (option -q). Please open your browser manually: $uri")
                } else if (RunningMode.headlessMode) {
                    log.info("Desktop not available in headless mode. Please open your browser manually: $uri")
                    emphasizedLog.log("Desktop not available in headless mode. Please open your browser manually: $uri")
                } else if (!RunningMode.desktopSupportsBrowse) {
                    log.info("Desktop not available. Please open your browser manually: $uri")
                    emphasizedLog.log("Desktop not available. Please open your browser manually: $uri")
                }
            }
            emphasizedLog.logEnd()
        } catch (ex: ParseException) {
            // oops, something went wrong
            System.err.println("Parsing failed.  Reason: " + ex.message)
borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
@@ -1,5 +1,6 @@
package de.micromata.borgbutler.server
import de.micromata.borgbutler.EmphasizedLogSupport
import mu.KotlinLogging
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@@ -56,15 +57,14 @@
    override fun addCorsMappings(registry: CorsRegistry) {
        if (RunningMode.webDevelopment) {
            log.warn("************************************")
            log.warn("***********               **********")
            log.warn("*********** ATTENTION!    **********")
            log.warn("***********               **********")
            log.warn("*********** Running in    **********")
            log.warn("*********** web dev mode! **********")
            log.warn("***********               **********")
            log.warn("************************************")
            log.warn("Don't deliver this app in dev mode due to security reasons (CrossOriginFilter is set)!")
            val emphasizedLog = EmphasizedLogSupport(log)
            emphasizedLog.logLevel = EmphasizedLogSupport.LogLevel.WARN
            emphasizedLog.log("ATTENTION!")
            emphasizedLog.log("")
            emphasizedLog.log("Running in web dev mode!")
            emphasizedLog.log("")
            emphasizedLog.log("Don't deliver this app in dev mode due to security reasons (CrossOriginFilter is set)!")
            emphasizedLog.logEnd()
            registry.addMapping("/**")
        }
    }