Paso 3: Proyecto de ejemplo
Vamos a construir un proyecto de ejemplo que implementa nuestro escenario simple. Puede obtener la muestra de github [4].
Estructura de proyecto de ejemplo es bastante simple. Tenemos par de secuencias de comandos de compilación, enlace simbólico a Qmonix c ++ cliente y un archivo de fuente:
. |__ CMakeLists.txt |__ Makefile |__ lib | |__ qmonix -> ../../../ |__ src |__ main.cpp
1. CMakeLists.txt:
cmake_minimum_required (VERSION 2.6)project (AppExitTracking CXX)set (CMAKE_BUILD_TYPE "Release") set (CMAKE_CXX_FLAGS "-Wall -Wextra -Werror -pedantic -ggdb -std=c++98")set (SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") file (GLOB_RECURSE SRC_FILES "${SRC_DIR}/*.cpp")set (EXIT_APP "exit_app") add_executable (${EXIT_APP} ${SRC_FILES}) target_link_libraries ("${EXIT_APP}" "curl" "qmonix")add_subdirectory ("lib/qmonix") include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/lib/qmonix/include")
2. Makefile:
BUILD_DIR = buildall: cmake .PHONY: allcmake: $(BUILD_DIR) cd $(BUILD_DIR); cmake $(CURDIR); make .PHONY: cmake$(BUILD_DIR): mkdir -p $ $(BUILD_DIR)/exit_app .PHONY: runclean: rm -rf $(BUILD_DIR) .PHONY: clean
3. main.cpp:
#include <iostream>#include <qmonix/qmonix.hpp> #include <qmonix/tracker.hpp> #include <qmonix/event_dispatcher.hpp>using namespace std; using namespace qmonix;int main(void) { tracker *qtrack = new tracker( new event_dispatcher("http://localhost:8337/event/")); qtrack->fire("exit_app/started"); qtrack->dispatch(); string command = ""; while (command != "exit") { cout << "Qmonix client version: " << qmonix::version << endl; cout << "Type 'exit' to quit." << endl; cin >> command; } qtrack->fire("exit_app/exited"); qtrack->dispatch(); delete qtrack; return 0; }
Esta sencilla aplicación realiza un seguimiento cuando el programa es iniciado y terminado con gracia. Una vez que se inicia entra en el bucle hasta que teclee "exit". Esto nos permite matar el programa por ejemplo con "ctrl + c". En tal caso caso exit_app/sale no disparará.