Changeset c09c225 in nscp
- Timestamp:
- 09/25/08 19:58:20 (5 years ago)
- Branches:
- master, 0.4.0, 0.4.1, 0.4.2, stable
- Children:
- 7531979
- Parents:
- bb8b6d1
- Files:
-
- 6 edited
-
AutoBuild.h (modified) (1 diff)
-
changelog (modified) (1 diff)
-
include/checkHelpers.hpp (modified) (1 diff)
-
modules/CheckDisk/CheckDisk.cpp (modified) (5 diffs)
-
modules/CheckDisk/CheckDisk.h (modified) (1 diff)
-
modules/CheckSystem/CheckSystem.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
AutoBuild.h
r371df23 rc09c225 3 3 // change the FALSE to TRUE for autoincrement of build number 4 4 #define INCREMENT_VERSION TRUE 5 #define FILEVER 0,3, 4,326 #define PRODUCTVER 0,3, 4,327 #define STRFILEVER _T("0.3. 4.32")8 #define STRPRODUCTVER _T("0.3. 4.32")9 #define STRPRODUCTDATE _T("2008-09- 18")5 #define FILEVER 0,3,5,2 6 #define PRODUCTVER 0,3,5,2 7 #define STRFILEVER _T("0.3.5.2") 8 #define STRPRODUCTVER _T("0.3.5.2") 9 #define STRPRODUCTDATE _T("2008-09-24") 10 10 #endif // AUTOBUILD_H -
changelog
rbb8b6d1 rc09c225 4 4 * Add API for rehashing the daemon (or implement it the API is there but does nothing) 5 5 * Improved socket performance (would be nice if we could be used as a "hub") 6 7 2008-09-24 MickeM - 0.3.5 8 * Fixed issue with CheckServiceState and CheckAll (it now works) 9 + Added new check: CheckFile2 which has the same syntax as the event log filtering. 10 Usage: CheckFile2 file=c:\test\*.txt filter=in filter+creation=<24h "syntax=%filename% was created %creation%" MinWarn=0 MinCrit=0 6 11 7 12 2008-09-18 MickeM - 0.3.4 -
include/checkHelpers.hpp
rbb8b6d1 rc09c225 687 687 message = lable + _T(": ") + formatState(TStateHolder::toStringLong(value), type); 688 688 return true; 689 } else {690 //std::cout << "No bounds specified..." << std::endl;691 689 } 692 690 return false; -
modules/CheckDisk/CheckDisk.cpp
rbc97cd8 rc09c225 365 365 366 366 struct file_filter { 367 filters::filter_all_numeric<unsigned long long, checkHolders::disk_size_handler<checkHolders::disk_size_type> > fileSize;368 filters::filter_all_times fileCreation;369 filters::filter_all_times fileAccessed;370 filters::filter_all_times fileWritten;367 filters::filter_all_numeric<unsigned long long, checkHolders::disk_size_handler<checkHolders::disk_size_type> > size; 368 filters::filter_all_times creation; 369 filters::filter_all_times accessed; 370 filters::filter_all_times written; 371 371 static const __int64 MSECS_TO_100NS = 10000; 372 372 373 373 inline bool hasFilter() { 374 return fileSize.hasFilter() || fileCreation.hasFilter() ||375 fileAccessed.hasFilter() || fileWritten.hasFilter();374 return size.hasFilter() || creation.hasFilter() || 375 accessed.hasFilter() || written.hasFilter(); 376 376 } 377 377 bool matchFilter(const file_info &value) const { 378 if (( fileSize.hasFilter())&&(fileSize.matchFilter(value.ullSize)))378 if ((size.hasFilter())&&(size.matchFilter(value.ullSize))) 379 379 return true; 380 else if (( fileCreation.hasFilter())&&(fileCreation.matchFilter((value.ullNow-value.ullCreationTime)/MSECS_TO_100NS)))380 else if ((creation.hasFilter())&&(creation.matchFilter((value.ullNow-value.ullCreationTime)/MSECS_TO_100NS))) 381 381 return true; 382 else if (( fileAccessed.hasFilter())&&(fileAccessed.matchFilter((value.ullNow-value.ullLastAccessTime)/MSECS_TO_100NS)))382 else if ((accessed.hasFilter())&&(accessed.matchFilter((value.ullNow-value.ullLastAccessTime)/MSECS_TO_100NS))) 383 383 return true; 384 else if (( fileWritten.hasFilter())&&(fileWritten.matchFilter((value.ullNow-value.ullLastWriteTime)/MSECS_TO_100NS)))384 else if ((written.hasFilter())&&(written.matchFilter((value.ullNow-value.ullLastWriteTime)/MSECS_TO_100NS))) 385 385 return true; 386 386 return false; 387 387 } 388 389 std::wstring getValue() const { 390 if (size.hasFilter()) 391 return _T("size: ") + size.getValue(); 392 if (creation.hasFilter()) 393 return _T("creation: ") + creation.getValue(); 394 if (accessed.hasFilter()) 395 return _T("accessed: ") + accessed.getValue(); 396 if (written.hasFilter()) 397 return _T("written: ") + written.getValue(); 398 return _T("UNknown..."); 399 } 400 388 401 }; 389 402 … … 480 493 }; 481 494 495 496 497 struct file_filter_function_ex : public baseFinderFunction 498 { 499 static const int filter_plus = 1; 500 static const int filter_minus = 2; 501 static const int filter_normal = 3; 502 503 typedef std::pair<int,file_filter> filteritem_type; 504 typedef std::list<filteritem_type > filterlist_type; 505 filterlist_type filter_chain; 506 bool bFilterAll; 507 bool bFilterIn; 508 bool error; 509 bool debug_; 510 std::wstring message; 511 std::wstring syntax; 512 std::wstring alias; 513 unsigned long long now; 514 unsigned int hit_count; 515 516 file_filter_function_ex() : hit_count(0), error(false), debug_(false), bFilterIn(true), bFilterAll(true) {} 517 result_type operator()(argument_type ffd) { 518 if ((ffd.wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)) 519 return true; 520 BY_HANDLE_FILE_INFORMATION _info; 521 522 HANDLE hFile = CreateFile((ffd.path + _T("\\") + ffd.wfd.cFileName).c_str(), GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, 523 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); 524 if (hFile == INVALID_HANDLE_VALUE) { 525 setError(_T("Could not open file: ") + ffd.path + _T("\\") + ffd.wfd.cFileName + _T(": ") + error::lookup::last_error()); 526 } 527 GetFileInformationByHandle(hFile, &_info); 528 CloseHandle(hFile); 529 file_info info(_info, ffd.wfd.cFileName); 530 info.ullNow = now; 531 532 bool bMatch = !bFilterIn; 533 for (filterlist_type::const_iterator cit3 = filter_chain.begin(); cit3 != filter_chain.end(); ++cit3 ) { 534 bool bTmpMatched = (*cit3).second.matchFilter(info); 535 int mode = (*cit3).first; 536 537 if ((mode == filter_minus)&&(bTmpMatched)) { 538 // a -<filter> hit so thrash item and bail out! 539 //if (debug_) 540 NSC_DEBUG_MSG_STD(_T("Matched: - ") + (*cit3).second.getValue() + _T(" for: ") + info.render(syntax)); 541 bMatch = false; 542 break; 543 } else if ((mode == filter_plus)&&(!bTmpMatched)) { 544 // a +<filter> missed hit so thrash item and bail out! 545 //if (debug_) 546 NSC_DEBUG_MSG_STD(_T("Matched (missed): + ") + (*cit3).second.getValue() + _T(" for: ") + info.render(syntax)); 547 bMatch = false; 548 break; 549 } else if (bTmpMatched) { 550 if (debug_) 551 NSC_DEBUG_MSG_STD(_T("Matched: . (contiunue): ") + (*cit3).second.getValue() + _T(" for: ") + info.render(syntax)); 552 bMatch = true; 553 } 554 } 555 556 NSC_DEBUG_MSG_STD(_T("result: ") + strEx::itos(bFilterIn) + _T(" -- ") + strEx::itos(bMatch)); 557 if ((bFilterIn&&bMatch)||(!bFilterIn&&!bMatch)) { 558 strEx::append_list(message, info.render(syntax)); 559 if (alias.length() < 16) 560 strEx::append_list(alias, info.filename); 561 else 562 strEx::append_list(alias, std::wstring(_T("..."))); 563 hit_count++; 564 } 565 return true; 566 } 567 inline const bool hasError() const { 568 return error; 569 } 570 inline void setError(std::wstring) { 571 error = true; 572 } 573 }; 574 575 482 576 NSCAPI::nagiosReturn CheckDisk::getFileAge(const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf) { 483 577 NSCAPI::nagiosReturn returnCode = NSCAPI::returnOK; … … 544 638 MAP_OPTIONS_BOOL_EX(_T("filter"), finder.bFilterIn, _T("in"), _T("out")) 545 639 MAP_OPTIONS_BOOL_EX(_T("filter"), finder.bFilterAll, _T("all"), _T("any")) 546 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-size"), fileSize, finder.filter_chain)547 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-creation"), fileCreation, finder.filter_chain)548 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-written"), fileWritten, finder.filter_chain)549 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-accessed"), fileAccessed, finder.filter_chain)640 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-size"), size, finder.filter_chain) 641 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-creation"), creation, finder.filter_chain) 642 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-written"), written, finder.filter_chain) 643 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-accessed"), accessed, finder.filter_chain) 550 644 MAP_OPTIONS_MISSING(message, _T("Unknown argument: ")) 551 645 MAP_OPTIONS_END() … … 585 679 } 586 680 681 #define MAP_FILTER(value, obj, filtermode) \ 682 else if (p__.first == value) { file_filter filter; filter.obj = p__.second; finder.filter_chain.push_back(filteritem_type(file_filter_function_ex::filtermode, filter)); } 683 684 NSCAPI::nagiosReturn CheckDisk::CheckFile2(const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf) { 685 NSCAPI::nagiosReturn returnCode = NSCAPI::returnOK; 686 std::list<std::wstring> stl_args = arrayBuffer::arrayBuffer2list(argLen, char_args); 687 typedef checkHolders::CheckContainer<checkHolders::MaxMinBoundsUInteger> CheckFileContainer; 688 typedef std::pair<int,file_filter> filteritem_type; 689 typedef std::list<filteritem_type > filterlist_type; 690 if (stl_args.empty()) { 691 message = _T("Missing argument(s)."); 692 return NSCAPI::returnUNKNOWN; 693 } 694 file_filter_function_ex finder; 695 PathContainer tmpObject; 696 std::list<std::wstring> paths; 697 unsigned int truncate = 0; 698 CheckFileContainer query; 699 std::wstring syntax = _T("%filename%"); 700 std::wstring alias; 701 bool bPerfData = true; 702 703 try { 704 MAP_OPTIONS_BEGIN(stl_args) 705 MAP_OPTIONS_NUMERIC_ALL(query, _T("")) 706 MAP_OPTIONS_STR2INT(_T("truncate"), truncate) 707 MAP_OPTIONS_BOOL_FALSE(IGNORE_PERFDATA, bPerfData) 708 MAP_OPTIONS_STR(_T("syntax"), syntax) 709 MAP_OPTIONS_PUSH(_T("path"), paths) 710 MAP_OPTIONS_STR(_T("alias"), alias) 711 MAP_OPTIONS_PUSH(_T("file"), paths) 712 MAP_OPTIONS_BOOL_EX(_T("filter"), finder.bFilterIn, _T("in"), _T("out")) 713 MAP_OPTIONS_BOOL_EX(_T("filter"), finder.bFilterAll, _T("all"), _T("any")) 714 /* 715 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-size"), fileSize, finder.filter_chain) 716 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-creation"), fileCreation, finder.filter_chain) 717 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-written"), fileWritten, finder.filter_chain) 718 MAP_OPTIONS_PUSH_WTYPE(file_filter, _T("filter-accessed"), fileAccessed, finder.filter_chain) 719 */ 720 721 MAP_FILTER(_T("filter+size"), size, filter_plus) 722 MAP_FILTER(_T("filter+creation"), creation, filter_plus) 723 MAP_FILTER(_T("filter+written"), written, filter_plus) 724 MAP_FILTER(_T("filter+accessed"), accessed, filter_plus) 725 726 MAP_FILTER(_T("filter.size"), size, filter_normal) 727 MAP_FILTER(_T("filter.creation"), creation, filter_normal) 728 MAP_FILTER(_T("filter.written"), written, filter_normal) 729 MAP_FILTER(_T("filter.accessed"), accessed, filter_normal) 730 731 MAP_FILTER(_T("filter-size"), size, filter_minus) 732 MAP_FILTER(_T("filter-creation"), creation, filter_minus) 733 MAP_FILTER(_T("filter-written"), written, filter_minus) 734 MAP_FILTER(_T("filter-accessed"), accessed, filter_minus) 735 736 MAP_OPTIONS_MISSING(message, _T("Unknown argument: ")) 737 MAP_OPTIONS_END() 738 } catch (filters::parse_exception e) { 739 message = e.getMessage(); 740 return NSCAPI::returnUNKNOWN; 741 } catch (filters::filter_exception e) { 742 message = e.getMessage(); 743 return NSCAPI::returnUNKNOWN; 744 } 745 FILETIME now; 746 GetSystemTimeAsFileTime(&now); 747 finder.now = ((now.dwHighDateTime * ((unsigned long long)MAXDWORD+1)) + (unsigned long long)now.dwLowDateTime); 748 finder.syntax = syntax; 749 for (std::list<std::wstring>::const_iterator pit = paths.begin(); pit != paths.end(); ++pit) { 750 recursive_scan<file_filter_function_ex>((*pit), finder); 751 if (finder.hasError()) { 752 message = _T("Error when scanning: ") + (*pit); 753 return NSCAPI::returnUNKNOWN; 754 } 755 } 756 message = finder.message; 757 if (!alias.empty()) 758 query.alias = alias; 759 else 760 query.alias = finder.alias; 761 if (query.alias.empty()) 762 query.alias = _T("no files found"); 763 query.runCheck(finder.hit_count, returnCode, message, perf); 764 if ((truncate > 0) && (message.length() > (truncate-4))) 765 message = message.substr(0, truncate-4) + _T("..."); 766 if (message.empty()) 767 message = _T("CheckFile ok"); 768 return returnCode; 769 } 770 587 771 NSCAPI::nagiosReturn CheckDisk::handleCommand(const strEx::blindstr command, const unsigned int argLen, TCHAR **char_args, std::wstring &msg, std::wstring &perf) { 588 772 if (command == _T("CheckFileSize")) { … … 592 776 } else if (command == _T("CheckFile")) { 593 777 return CheckFile(argLen, char_args, msg, perf); 778 } else if (command == _T("CheckFile2")) { 779 return CheckFile2(argLen, char_args, msg, perf); 594 780 } else if (command == _T("getFileAge")) { 595 781 return getFileAge(argLen, char_args, msg, perf); -
modules/CheckDisk/CheckDisk.h
re380ffe rc09c225 55 55 NSCAPI::nagiosReturn CheckDriveSize(const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf); 56 56 NSCAPI::nagiosReturn CheckFile(const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf); 57 NSCAPI::nagiosReturn CheckFile2(const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf); 57 58 NSCAPI::nagiosReturn getFileAge(const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf); 58 59 -
modules/CheckSystem/CheckSystem.cpp
rbb8b6d1 rc09c225 575 575 } 576 576 } 577 tmpObject.crit.state = _T("ignored"); 577 578 } 578 579 for (std::list<StateContainer>::iterator it = list.begin(); it != list.end(); ++it) { … … 622 623 else if (info.m_dwCurrentState == MY_SERVICE_NOT_FOUND) 623 624 value = checkHolders::state_not_found; 624 else 625 else { 626 NSC_LOG_MESSAGE(_T("Service had no (valid) state: ") + (*it).data + _T(" (") + strEx::itos(info.m_dwCurrentState) + _T(")")); 625 627 value = checkHolders::state_none; 628 } 629 unsigned int x = returnCode; 626 630 (*it).perfData = bPerfData; 627 631 (*it).setDefault(tmpObject); 628 632 (*it).runCheck(value, returnCode, msg, perf); 629 } 630 631 } 632 if (msg.empty() )633 // NSC_LOG_MESSAGE(_T("Service: ") + (*it).data + _T(" (") + strEx::itos(info.m_dwCurrentState) + _T(":") + strEx::itos((*it).warn.state.value_) + _T(":") + strEx::itos((*it).crit.state.value_) + _T(") -- (") + strEx::itos(returnCode) + _T(":") + strEx::itos(x) + _T(")")); 634 } 635 } 636 if (msg.empty() && returnCode == NSCAPI::returnOK) 633 637 msg = _T("OK: All services are in their apropriate state."); 638 else if (msg.empty()) 639 msg = NSCHelper::translateReturn(returnCode) + _T(": Whooha this is odd."); 634 640 else if (!bNSClient) 635 641 msg = NSCHelper::translateReturn(returnCode) + _T(": ") + msg;
Note: See TracChangeset
for help on using the changeset viewer.








