Changeset 6c52d2


Ignore:
Timestamp:
Jul 6, 2012, 10:18:44 AM (13 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
4ccc8d
Parents:
5fa1f0
git-author:
Frederik Heber <heber@…> (06/01/12 16:45:42)
git-committer:
Frederik Heber <heber@…> (07/06/12 10:18:44)
Message:

Refactored option parsing in poolworker into WorkerOptions and SignalOptions in own modules.

Location:
src
Files:
4 added
2 edited

Legend:

Unmodified
Added
Removed
  • src/Makefile.am

    r5fa1f0 r6c52d2  
    398398  ${CodePatterns_LIBS}
    399399
    400 PoolWorker_SOURCES = $(POOLWORKERSOURCE) $(POOLWORKERHEADER) poolworker.cpp
    401 PoolWorker_LDFLAGS = $(AM_LDFLAGS) $(BOOST_ASIO_LDFLAGS) $(BOOST_SYSTEM_LDFLAGS) $(BOOST_THREAD_LDFLAGS) $(BOOST_SERIALIZATION_LDFLAGS)
    402 PoolWorker_CXXFLAGS = $(AM_CPPFLAGS) $(BOOST_ASIO_DEBUG)
     400PoolWorker_SOURCES = $(POOLWORKERSOURCE) $(POOLWORKERHEADER) poolworker.cpp DefaultOptions.cpp DefaultOptions.hpp SignalOptions.cpp SignalOptions.hpp WorkerOptions.cpp WorkerOptions.hpp
     401PoolWorker_LDFLAGS = $(AM_LDFLAGS) $(BOOST_PROGRAM__OPTIONS_LDFLAGS) $(BOOST_SYSTEM_LDFLAGS) $(BOOST_THREAD_LDFLAGS)
     402PoolWorker_CXXFLAGS = $(AM_CPPFLAGS)
    403403PoolWorker_LDADD = \
    404404  libMolecuilderJobs.la \
  • src/poolworker.cpp

    r5fa1f0 r6c52d2  
    3131#include <boost/lexical_cast.hpp>
    3232#include <signal.h>
    33 #include <unistd.h>
    3433#include <vector>
    3534
     
    3736#include "CodePatterns/Info.hpp"
    3837#include "CodePatterns/Log.hpp"
    39 #include "Fragmentation/Automation/Pool/PoolWorker.hpp"
     38#include "Pool/PoolWorker.hpp"
     39#include "atexit.hpp"
     40#include "Jobs/SystemCommandJob.hpp"
     41#include "WorkerOptions.hpp"
    4042
    4143//!> global shutdown function
     
    6567}
    6668
     69
    6770int main(int argc, char* argv[])
    6871{
     
    7073  // this is handled by the cleanup function
    7174  atexit(cleanUp);
     75
     76  WorkerOptions WorkerOpts;
     77  boost::program_options::variables_map vm;
    7278
    7379  // Declare the supported options.
     
    8288  ;
    8389
    84   boost::program_options::variables_map vm;
    8590  boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
    8691  boost::program_options::notify(vm);
    8792
    88   if (vm.count("help")) {
    89     std::cout << desc << "\n";
    90     return 1;
    91   }
    92 
    93   if (vm.count("verbosity")) {
    94     LOG(0, "STATUS: Verbosity level was set to " << vm["verbosity"].as<size_t>() << ".");
    95     setVerbosity(vm["verbosity"].as<size_t>());
    96   } else {
    97     LOG(0, "STATUS: Verbosity level was not set, defaulting to 5.");
    98     setVerbosity(5);
    99   }
    100 
    101   std::string server;
    102   std::string serverport;
    103   if (vm.count("server")) {
    104     server = vm["server"].as< std::string >();
    105     serverport = server.substr(server.find_last_of(':')+1, std::string::npos);
    106     server = server.substr(0, server.find_last_of(':'));
    107     try {
    108       boost::lexical_cast<size_t>(serverport);
    109     } catch (boost::bad_lexical_cast) {
    110       ELOG(1, "Could not interpret " << serverport << " as server:port.");
    111       return 255;
    112     }
    113     LOG(1, "INFO: Using " << server << ":" << serverport << " as server's address.");
    114   } else {
    115     ELOG(1, "Requiring server's address (host:port) to connect to.");
    116     return 255;
    117   }
    118 
    119   std::string hostname("localhost");
    120   if (vm.count("hostname")) {
    121     hostname = vm["hostname"].as< std::string >();
    122     LOG(1, "INFO: Using " << hostname << " as host's name.");
    123   } else {
    124     char name[1024];
    125     if (gethostname(name, 1023) == 0) {
    126       hostname = name;
    127       LOG(1, "INFO: Using obtained hostname " << hostname << ".");
    128     } else {
    129       ELOG(1, "No hostname given and failed to determine automatically.");
    130       return 255;
    131     }
    132   }
    133 
    134   std::string listenport;
    135   if (vm.count("listen")) {
    136     try {
    137       listenport = vm["listen"].as< std::string >();
    138     } catch (boost::bad_lexical_cast) {
    139       ELOG(1, "Could not read " << vm["listen"].as< std::string >() << " as digits.");
    140       return 255;
    141     }
    142     LOG(1, "INFO: Using port " << listenport << " to listen to server connects.");
    143   } else {
    144     ELOG(1, "Requiring port to listen on .");
    145     return 255;
    146   }
     93  int status = 0;
     94  if (status) return status;
     95  status = WorkerOpts.parseHelp(vm, desc);
     96  if (status) return status;
     97  status = WorkerOpts.parseVerbosity(vm);
     98  if (status) return status;
     99  status = WorkerOpts.parseServer(vm);
     100  if (status) return status;
     101  status = WorkerOpts.parseListenPort(vm);
     102  if (status) return status;
     103  status = WorkerOpts.parseLocalhost(vm);
     104  if (status) return status;
     105  status = WorkerOpts.parseSignals(vm);
     106  if (status) return status;
    147107
    148108  size_t exitflag = 0;
     
    150110  {
    151111    boost::asio::io_service io_service;
    152     PoolWorker client(io_service, server, serverport, hostname, listenport);
     112    PoolWorker client(io_service, WorkerOpts.server, WorkerOpts.serverport, WorkerOpts.hostname, WorkerOpts.listenport);
    153113
    154114    // catch ctrl-c and shutdown worker properly
    155115    shutdownfunction = boost::bind(&PoolWorker::shutdown, boost::ref(client), _1);
    156     if (vm.count("signal")) {
    157       signals =  vm["signal"].as< std::vector<size_t> >();
    158       for (std::vector<size_t>::const_iterator iter = signals.begin();
    159           iter != signals.end(); ++iter) {
    160         LOG(0, "STATUS: Catching signal " << *iter << " via signal handler.");
    161         signal(*iter, &signalhandler);
    162       }
    163     } else {
    164       LOG(0, "STATUS: No signals are caught.");
     116    for (std::vector<size_t>::const_iterator iter = WorkerOpts.signals.begin();
     117        iter != WorkerOpts.signals.end(); ++iter) {
     118      LOG(0, "STATUS: Catching signal " << *iter << " via signal handler.");
     119      signal(*iter, &signalhandler);
    165120    }
    166121
Note: See TracChangeset for help on using the changeset viewer.