mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
28f7b4a0b0
Summary: This commit causes a desktop notification to be shown if we generate EIO or ETIMEDOUT responses via fuse; the prompt is intended to make it obvious to the user that they need to connect to the VPN. The commit by itself doesn't show a notification, it allows configuring a command that can be run to do something to show a notification. The test plan includes one such configuration for our corp environment. * It doesn't trigger for thrift-originated downloads (eg: prefetch), only for VFS operations through FUSE. * Ideally we'd know exactly when we have a network related error in the store code and use that to trigger the notification. However, we have a rather convoluted set of importers and fallbacks today, one of which is interpreting a generic response returned from a pipe, so it is not especially clear exactly where we should locate the logic Reviewed By: chadaustin Differential Revision: D17513364 fbshipit-source-id: 45134f3672679cb5580cb0c1bc12a0d6e38525ca
47 lines
1.4 KiB
C++
47 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This software may be used and distributed according to the terms of the
|
|
* GNU General Public License version 2.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <folly/Synchronized.h>
|
|
#include "eden/fs/config/ReloadableConfig.h"
|
|
|
|
namespace facebook {
|
|
namespace eden {
|
|
|
|
class ReloadableConfig;
|
|
|
|
class Notifications {
|
|
public:
|
|
explicit Notifications(ReloadableConfig& edenConfig) : config_(edenConfig) {}
|
|
|
|
/**
|
|
* Show a generic "something went wrong" notification to the interactive
|
|
* user.
|
|
* This is implemented by invoking the command specified by the
|
|
* configuration value named:
|
|
* notifications:generic-connectivity-notification-cmd
|
|
* The intent is that that command will show a desktop "toast" notification
|
|
* to the user, but in some environments it is possible that it might instead
|
|
* trigger eg: a Workplace Messenger chat notification.
|
|
* This Notifications instance will throttle the rate at which these
|
|
* occur based on the value of the notifications:interval configuration
|
|
* which defaults to a reasonable value to avoid spamming the user.
|
|
*/
|
|
void showGenericErrorNotification(const std::exception& err);
|
|
|
|
private:
|
|
bool canShowNotification();
|
|
|
|
ReloadableConfig& config_;
|
|
folly::Synchronized<std::optional<std::chrono::steady_clock::time_point>>
|
|
lastShown_;
|
|
};
|
|
|
|
} // namespace eden
|
|
} // namespace facebook
|