blob: b640e90b2271c5ca36d7d66e253ce19c1d32383e [file] [log] [blame]
/************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*
*************************************************************/
#ifndef SINGA_UTILS_CHANNEL_H_
#define SINGA_UTILS_CHANNEL_H_
#include <google/protobuf/message.h>
#include <iostream>
#include <fstream>
#include <map>
#include <string>
namespace singa {
/// Channel for appending metrics or other information into files or screen.
class Channel {
public:
explicit Channel(const std::string& name);
~Channel();
/// Return the channel name, which is also used for naming the output file.
inline const std::string& GetName() { return name_; }
/// Disabled by default.
inline void EnableDestStderr(bool enable) { stderr_ = enable; }
/// Enabled by default.
inline void EnableDestFile(bool enable) { file_ = enable; }
/// Reset the output file path.
/// The dest file is named as global dir + channel name by default.
void SetDestFilePath(const std::string& file);
/// Append a string message
void Send(const std::string& message);
/// Append a protobuf message
void Send(const google::protobuf::Message& message);
private:
std::string name_ = "";
bool stderr_ = false;
bool file_ = false;
std::ofstream os_;
};
class ChannelManager {
public:
ChannelManager() {}
~ChannelManager();
void Init();
void SetDefaultDir(const char* dir);
Channel* GetInstance(const std::string& channel);
private:
std::string dir_ = "";
std::map<std::string, Channel*> name2ptr_;
};
/// Initial function for global usage of channel.
/// 'argv' is for future use.
void InitChannel(const char* argv);
/// Set the directory name for persisting channel content
void SetChannelDirectory(const char* path);
/// Get the channel instance
Channel* GetChannel(const std::string& channel_name);
} // namespace singa
#endif // SINGA_UTILS_CHANNEL_H__