Adds some settings to check flipper-server state

Summary:
There's one setting: to enable or disable flipper-server.

However, I've added some current running state to it. If there's a better way of doing this, please do let me know.

Reviewed By: aigoncharov

Differential Revision: D37276670

fbshipit-source-id: f6c941cf0cfe55c267b9bcb9f799934fba1e28ef
This commit is contained in:
Lorenzo Blasa
2022-06-22 05:26:11 -07:00
committed by Facebook GitHub Bot
parent 8c67b049ab
commit 335dec1a08
7 changed files with 83 additions and 3 deletions

View File

@@ -87,7 +87,11 @@ async function getFlipperServer(
);
const keytar: KeytarModule = await getKeytarModule(staticPath);
const gatekeepers = getGatekeepers(environmentInfo.os.unixname);
if (gatekeepers['flipper_desktop_use_server']) {
const serverUsageEnabled = gatekeepers['flipper_desktop_use_server'];
const settings = await loadSettings();
if (serverUsageEnabled && (!settings.server || settings.server.enabled)) {
const socketPath = await makeSocketPath();
if (!(await checkSocketInUse(socketPath))) {
console.info('flipper-server: not running/listening, start');
@@ -104,6 +108,7 @@ async function getFlipperServer(
'',
false,
keytar,
'embedded',
);
const companionEnv = await initCompanionEnv(server);
@@ -113,6 +118,7 @@ async function getFlipperServer(
} else {
console.info('flipper-server: already running');
const loggerOutputFile = 'flipper-server-log.out';
tailServerLogs(path.join(staticPath, loggerOutputFile));
}
@@ -139,7 +145,7 @@ async function getFlipperServer(
},
launcherSettings: await loadLauncherSettings(),
processConfig: loadProcessConfig(env),
settings: await loadSettings(),
settings,
validWebSocketOrigins:
constants.VALID_WEB_SOCKET_REQUEST_ORIGIN_PREFIXES,
},

View File

@@ -28,6 +28,8 @@ import {
// In the future, this file would deserve it's own package, as it doesn't really relate to plugins.
// Since flipper-plugin however is currently shared among server, client and defines a lot of base types, leaving it here for now.
export type FlipperServerType = 'embedded' | 'external';
export type FlipperServerState =
| 'pending'
| 'starting'
@@ -454,6 +456,7 @@ export type FlipperServerConfig = {
processConfig: ProcessConfig;
validWebSocketOrigins: string[];
environmentInfo: EnvironmentInfo;
type?: FlipperServerType;
};
export interface FlipperServer {

View File

@@ -58,6 +58,9 @@ export type Settings = {
host?: string;
port?: number;
};
server?: {
enabled: boolean;
};
};
export enum ReleaseChannel {

View File

@@ -8,7 +8,11 @@
*/
import os from 'os';
import {parseEnvironmentVariables, getLogger} from 'flipper-common';
import {
parseEnvironmentVariables,
getLogger,
FlipperServerType,
} from 'flipper-common';
import path from 'path';
import fs from 'fs-extra';
import {KeytarModule} from '../utils/keytar';
@@ -34,6 +38,7 @@ export async function startFlipperServer(
settingsString: string,
enableLauncherSettings: boolean,
keytarModule: KeytarModule,
type: FlipperServerType,
): Promise<FlipperServerImpl> {
const execPath = process.execPath;
const appPath = rootDir;
@@ -68,6 +73,7 @@ export async function startFlipperServer(
processConfig: loadProcessConfig(env),
settings: await loadSettings(settingsString),
validWebSocketOrigins: ['localhost:', 'http://localhost:'],
type,
},
getLogger(),
keytarModule,

View File

@@ -69,6 +69,9 @@ function getDefaultSettings(): Settings {
enablePluginMarketplace: false,
marketplaceURL: '',
enablePluginMarketplaceAutoUpdate: true,
server: {
enabled: false,
},
};
}

View File

@@ -105,6 +105,7 @@ async function start() {
argv.settingsString,
argv.launcherSettings,
keytar,
'external',
);
const companionEnv = await initCompanionEnv(flipperServer);
if (argv.failFast) {

View File

@@ -130,8 +130,14 @@ class SettingsSheet extends Component<Props, State> {
enablePluginMarketplace,
enablePluginMarketplaceAutoUpdate,
marketplaceURL,
server,
} = this.state.updatedSettings;
const serverUsageEnabled = getRenderHostInstance().GK(
'flipper_desktop_use_server',
);
const serverType = getRenderHostInstance().serverConfig.type;
const settingsPristine =
isEqual(this.props.settings, this.state.updatedSettings) &&
isEqual(this.props.launcherSettings, this.state.updatedLauncherSettings);
@@ -381,6 +387,58 @@ class SettingsSheet extends Component<Props, State> {
/>
</ToggledSection>
</NUX>
<ToggledSection
label="Server (Experimental)"
toggled={(serverUsageEnabled && (!server || server.enabled)) ?? false}
frozen={!serverUsageEnabled}
onChange={(v) => {
this.setState((prevState) => ({
updatedSettings: {
...prevState.updatedSettings,
server: {enabled: v},
},
}));
}}>
{serverUsageEnabled ? (
<>
<ConfigText
content={
"For changes to take effect, click on 'Apply and Restart'"
}
/>
{serverType ? (
<>
<ConfigText
content={`Flipper is currently using an '${serverType}' server.`}
/>
{serverType === 'external' ? (
<>
<br />
<span>
To stop the server, it may be necessary to kill the
process listening at port <b>52342</b>. See below:
</span>
<br />
<code>
sudo lsof -i -P | grep LISTEN | grep <b>52342</b>
<br />
sudo kill &lt;PID&gt;
</code>
</>
) : (
<></>
)}
</>
) : (
<></>
)}
</>
) : (
<ConfigText
content={'The usage of flipperd (server) is currently disabled.'}
/>
)}
</ToggledSection>
<Layout.Right center>
<span>Reset all new user tooltips</span>
<ResetTooltips />