Commit f16d5f59 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

bring back fnordmetric-cli main file

parent fab3e59e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -8,3 +8,4 @@ cmake_install.cmake
*.so
*.dll
*.dylib
signaltk
+5 −0
Original line number Diff line number Diff line
@@ -13,9 +13,14 @@ find_package(Threads)
find_package(Cairo)
include_directories(${CAIRO_INCLUDE_DIRS})

add_definitions(-DFNORDMETRIC_VERSION="unstable")

add_subdirectory(src/signaltk/core)
add_subdirectory(src/signaltk/plot)
add_subdirectory(src/signaltk/util)

add_executable(signaltk src/signaltk_cli.cc)
target_link_libraries(signaltk signaltk-plot signaltk-graphics signaltk-util ${CAIRO_LIBRARIES})

add_subdirectory(test/plot)
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ add_library(signaltk-util STATIC
    file.cc
    outputstream.cc
    inputstream.cc
    flagparser.cc
    ISO8601.cc
    UTF8.cc
    wallclock.cc)

src/signaltk_cli.cc

0 → 100644
+151 −0
Original line number Diff line number Diff line
/**
 * This file is part of the "FnordMetric" project
 *   Copyright (c) 2018 Paul Asmuth
 *   Copyright (c) 2016 Paul Asmuth, Laura Schlimmer, FnordCorp B.V.
 *   Copyright (c) 2014 Paul Asmuth, Google Inc.
 *
 * FnordMetric is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License v3.0. You should have received a
 * copy of the GNU General Public License along with this program. If not, see
 * <http://www.gnu.org/licenses/>.
 */
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <regex>
#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/file.h>
#include <signaltk/util/flagparser.h>
#include <signaltk/util/fileutil.h>
#include <signaltk/util/return_code.h>
#include <signaltk/util/stringutil.h>

using namespace signaltk;

int main(int argc, const char** argv) {
  FlagParser flags;

  flags.defineFlag(
      "config",
      FlagParser::T_STRING,
      false,
      "c",
      NULL);

  flags.defineFlag(
      "help",
      FlagParser::T_STRING,
      false,
      "?",
      "");

  flags.defineFlag(
      "version",
      FlagParser::T_SWITCH,
      false,
      "V",
      NULL);

  /* parse flags */
  {
    auto rc = flags.parseArgv(argc, argv);
    if (!rc.isSuccess()) {
      std::cerr << "ERROR: " << rc.getMessage() << std::endl;
      return 1;
    }
  }

  auto cmd_argv = flags.getArgv();

  /* print help */
  if (flags.isSet("version")) {
    std::cerr <<
        StringUtil::format(
            "signaltk $0\n"
            "Part of the FnordMetric project (http://fnordmetric.io)\n"
            "Copyright (c) 2016, Paul Asmuth et al. All rights reserved.\n\n",
            FNORDMETRIC_VERSION);

    return 0;
  }

  bool help_requested = false;
  std::string help_topic;

  if (flags.isSetExplicit("help")) {
    help_requested = true;
    help_topic = flags.getString("help");
  }
 
  if (cmd_argv.size() > 0 && cmd_argv[0] == "help") {
    help_requested = true;
    help_topic = cmd_argv.size() > 1 ? cmd_argv[1] : "";
  }

  if (help_requested && help_topic.empty()) {
    std::cerr <<
        "Usage: $ signaltk [OPTIONS]\n"
        "   -c, --config <file>       Load config file\n"
        "   -?, --help <topic>        Display a command's help text and exit\n"
        "   -v, --version             Display the version of this binary and exit\n"
        "\n"
        "Commands:\n";

    //for (const auto& c : commands) {
      //stdout_os->printf("   %-26.26s", c->getName().c_str());
      //stdout_os->printf("%-80.80s\n", c->getDescription().c_str());
    //}

    std::cerr << "\nSee 'signaltk help <command>' for information about a specific subcommand.\n";
    return 0;
  }

  /*
  if (help_requested && !help_topic.empty()) {
    const auto& cmd = std::find_if(
        commands.begin(),
        commands.end(),
        [&help_topic] (const auto& c) { return c->getName() == help_topic; });

    if (cmd == commands.end()) {
      std::cerr << StringUtil::format("No manual entry for signaltk '$0'\n", help_topic);
      return 1;
    } else {
      (*cmd)->printHelp();
      return 0;
    }
  }
  */

  /*
  const auto& cmd = std::find_if(
      commands.begin(),
      commands.end(),
      [&cmd_argv] (const auto& c) { return c->getName() == cmd_argv.front(); });

  if (cmd == commands.end()) {
    std::cerr << StringUtil::format(
        "ERROR: '$0' is not a signaltk command. See 'signaltk --help'.\n",
        cmd_argv[0]);

    return 1;
  }

  CLIContext ctx;
  ctx.config = &config;
  ctx.storage_backend = backend.get();

  cmd_argv.erase(cmd_argv.begin());
  auto rc = (*cmd)->execute(&ctx, cmd_argv);

  if (!rc.isSuccess()) {
    std::cerr << StringUtil::format("ERROR: $0\n", rc.getMessage());
  }
  */

  auto rc = ReturnCode::success();

  return rc.isSuccess() ? 0 : 1;
}
+20 −8
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ TEST_CASE(ChartTest, TestPlotLayoutWithLeftAxis, [] () {
  //axis_left->addLabel(1.0, "5");

  //plot_layout.render(&target);
  {
    GridDefinition grid(GridDefinition::GRID_HORIZONTAL);
    grid.addTick(0.0);
    grid.addTick(0.2);
@@ -83,8 +84,19 @@ TEST_CASE(ChartTest, TestPlotLayoutWithLeftAxis, [] () {
    grid.addTick(0.6);
    grid.addTick(0.8);
    grid.addTick(1.0);
    renderGrid(grid, Viewport{target.width, target.height}, &target);
  }

  {
    GridDefinition grid(GridDefinition::GRID_VERTICAL);
    grid.addTick(0.0);
    grid.addTick(0.2);
    grid.addTick(0.4);
    grid.addTick(0.6);
    grid.addTick(0.8);
    grid.addTick(1.0);
    renderGrid(grid, Viewport{target.width, target.height}, &target);
  }

  target.writePNG("test_plot_layout_with_left_axis.png");
});
Loading