Files
flipper/xplat/Flipper/FlipperState.cpp
John Knox 66d9b563ce Record state error msg in debug log
Summary:
When an operation fails, we have an error message. This was being displayed in the diagnostic screen output, but not included in the debug log.

This makes them both have same bahaviour, so they both include the error messages.

Reviewed By: passy

Differential Revision: D17181847

fbshipit-source-id: 823f73d641d2315da86a0019479716852950f9a5
2019-09-04 09:29:33 -07:00

82 lines
2.0 KiB
C++

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the LICENSE
* file in the root directory of this source tree.
*/
#include "FlipperState.h"
#include "FlipperStateUpdateListener.h"
#include "FlipperStep.h"
#include <vector>
#if FLIPPER_DEBUG_LOG
#include "Log.h"
#endif
using namespace facebook::flipper;
/* Class responsible for collecting state updates and combining them into a
* view of the current state of the flipper client. */
FlipperState::FlipperState() : logs("") {}
void FlipperState::setUpdateListener(
std::shared_ptr<FlipperStateUpdateListener> listener) {
mListener = listener;
}
void FlipperState::started(std::string step) {
#if FLIPPER_DEBUG_LOG
log("[started] " + step);
#endif
if (stateMap.find(step) == stateMap.end()) {
insertOrder.push_back(step);
}
stateMap[step] = State::in_progress;
if (mListener) {
mListener->onUpdate();
}
}
void FlipperState::success(std::string step) {
#if FLIPPER_DEBUG_LOG
log("[finished] " + step);
#endif
logs = logs + "[Success] " + step + "\n";
stateMap[step] = State::success;
if (mListener) {
mListener->onUpdate();
}
}
void FlipperState::failed(std::string step, std::string errorMessage) {
std::string message = "[Failed] " + step + ": " + errorMessage;
#if FLIPPER_DEBUG_LOG
log(message);
#endif
logs = logs + message + "\n";
stateMap[step] = State::failed;
if (mListener) {
mListener->onUpdate();
}
}
// TODO: Currently returns string, but should really provide a better
// representation of the current state so the UI can show it in a more intuitive
// way
std::string FlipperState::getState() {
return logs;
}
std::vector<StateElement> FlipperState::getStateElements() {
std::vector<StateElement> v;
for (auto stepName : insertOrder) {
v.push_back(StateElement(stepName, stateMap[stepName]));
}
return v;
}
std::shared_ptr<FlipperStep> FlipperState::start(std::string step_name) {
started(step_name);
return std::make_shared<FlipperStep>(step_name, this);
}