isParityRunning.js 1.35 KiB
Newer Older
Amaury Martiny's avatar
Amaury Martiny committed
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
//
Amaury Martiny's avatar
Amaury Martiny committed
// SPDX-License-Identifier: BSD-3-Clause
Amaury Martiny's avatar
Amaury Martiny committed

import axios from 'axios';
import debug from 'debug';
import retry from 'async-retry';
import { cli } from './utils/cli';
import { name } from '../package.json';
const logger = debug(`${name}:main`);
Amaury Martiny's avatar
Amaury Martiny committed

// Try to ping these hosts
const hostsToPing = ['http://127.0.0.1:8545', 'http://127.0.0.1:8546'];
if (cli.wsInterface || cli.wsPort) {
  // Also try custom host/port if a --ws-interface or --ws-port flag is passed
  hostsToPing.push(
    `http://${cli.wsInterface || '127.0.0.1'}:${cli.wsPort || '8545'}`
  );
}
 * Detect if another instance of parity is already running or not. To achieve
 * that, we just ping on the common hosts, see hostsToPing array.
 * @return [Promise<Boolean>] - Promise that resolves to true or false.
export const isParityRunning = async () => {
  try {
    // Retry to ping as many times as there are hosts in `hostsToPing`
    await retry(
      async (_, attempt) => {
Amaury Martiny's avatar
Amaury Martiny committed
        const host = hostsToPing[attempt - 1]; // Attempt starts with 1
        await axios.get(host);
Amaury Martiny's avatar
Amaury Martiny committed
          `Another instance of parity is already running on ${host}, skip running local instance.`
        );
      },
      { retries: hostsToPing.length }

    return true;
  } catch (e) {
    return false;