Skip to content
This repository was archived by the owner on Mar 31, 2023. It is now read-only.

cybozu-go/well

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8cbd22d · Mar 31, 2023
Feb 1, 2023
Feb 18, 2023
Sep 23, 2019
Dec 14, 2021
Sep 21, 2019
Feb 1, 2023
Aug 28, 2018
Sep 6, 2016
Mar 31, 2023
Aug 29, 2022
Oct 20, 2018
Mar 31, 2023
Oct 20, 2018
Oct 20, 2018
Oct 20, 2018
Oct 20, 2018
Dec 14, 2021
Feb 20, 2023
Feb 20, 2023
Oct 20, 2018
Dec 14, 2021
Dec 14, 2021
Dec 14, 2021
Dec 14, 2021
Feb 1, 2023
Feb 1, 2023
Feb 1, 2023
Oct 20, 2018
Oct 20, 2018
Oct 20, 2018
Feb 1, 2023
Feb 1, 2023
Dec 14, 2021
Oct 20, 2018
Oct 20, 2018
Oct 20, 2018
Oct 20, 2018
Oct 20, 2018
Jan 20, 2020
Dec 14, 2021
Oct 20, 2018
Dec 14, 2021
Oct 20, 2018
Oct 20, 2018
Dec 14, 2021

Repository files navigation

GitHub release CI PkgGoDev Go Report Card

Go Command Framework

Deprecated: This project has come to an end and will not receive any update.

This is a framework to create well-behaving commands.

Features

Requirements

Go 1.11 or later, though the code is expected to work with Go 1.7.

Specifications

Commands using this framework implement these external specifications:

Command-line options

  • -logfile FILE

    Output logs to FILE instead of standard error.

  • -loglevel LEVEL

    Change logging threshold to LEVEL. Default is info.
    LEVEL is one of critical, error, warning, info, or debug.

  • -logformat FORMAT

    Change log formatter. Default is plain.
    FORMAT is one of plain, logfmt, or json.

Signal Handlers

  • SIGUSR1

    If -logfile is specified, this signal make the program reopen the log file to cooperate with an external log rotation program.

    On Windows, this is not implemented.

  • SIGINT and SIGTERM

    These signals cancel the context of the global environment, and hence goroutines registered with the environment. Usually this will result in graceful stop of network servers, if any.

    On Windows, only SIGINT is handled.

  • SIGHUP

    This signal is used to restart network servers gracefully. Internally, the main (master) process restarts its child process. The PID of the master process thus will not change.

    There is one limitation: the location of log file cannot be changed by graceful restart. To change log file location, the server need to be (gracefully) stopped and started.

    On Windows, this is not implemented.

  • SIGPIPE

    The framework changes the way Go handles SIGPIPE slightly. If a program using this framework receives SIGPIPE when writing to stdout or stderr, the program exits with status code 2. See #15 for details.

Environment variables

  • REQUEST_ID_HEADER

    The value of this variable is used as HTTP header name. The HTTP header is used to track activities across services. The default header name is "X-Cybozu-Request-ID".

  • CYBOZU_LISTEN_FDS

    This is used internally for graceful restart.

  • CANCELLATION_DELAY_SECONDS

    After SIGINT or SIGTERM received, the signal handler waits for the seconds before cancelling the context. The default value is 5 sec.

Usage

Read Tutorial, the design notes and API documents.

A wiki page for cobra users is also available.

Real world examples

Pull requests are welcome to add your project to this list!