blob: 390ff50e1b1e900e226ac2ab82cf1de99058a139 [file] [log] [blame]
/*
* Copyright 2015 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
////////////////////////////////////////////////////////////////
//
// yaml-file-reader.h
//
// This file deals with reading yaml config file.
// It also does auto reloads if the file changes
//
///////////////////////////////////////////////////////////////
#ifndef YAML_FILE_READER_H_
#define YAML_FILE_READER_H_
#include "yaml-cpp/yaml.h"
#include "basics/callback.h"
#include "basics/sptypes.h"
#include "network/event_loop.h"
namespace heron {
namespace config {
class YamlFileReader {
public:
YamlFileReader(EventLoop* eventLoop, const sp_string& _config_file);
virtual ~YamlFileReader();
protected:
virtual void OnConfigFileLoad() = 0;
void LoadConfig();
void AddIfMissing(const sp_string& _var, const sp_string& _default);
YAML::Node config_;
private:
void CheckForChange(EventLoop::Status);
VCallback<EventLoop::Status> reload_cb_;
sp_string config_file_;
time_t last_reload_;
};
} // namespace config
} // namespace heron
#endif