summaryrefslogtreecommitdiffstats
path: root/meta-facebook/meta-wedge/recipes-wedge/rest-api/files/bmc_command.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta-facebook/meta-wedge/recipes-wedge/rest-api/files/bmc_command.py')
-rw-r--r--meta-facebook/meta-wedge/recipes-wedge/rest-api/files/bmc_command.py112
1 files changed, 0 insertions, 112 deletions
diff --git a/meta-facebook/meta-wedge/recipes-wedge/rest-api/files/bmc_command.py b/meta-facebook/meta-wedge/recipes-wedge/rest-api/files/bmc_command.py
deleted file mode 100644
index d4dc877..0000000
--- a/meta-facebook/meta-wedge/recipes-wedge/rest-api/files/bmc_command.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2014-present Facebook. All Rights Reserved.
-#
-# This program file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program in a file named COPYING; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-#
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
-
-import os
-import subprocess
-import select
-import sys
-import time
-
-DEFAULT_TIMEOUT = 10 #sec
-
-# Note: Python 3.0 supports communicate() with a timeout option.
-# If we upgrade to this version we will no longer need timed_communicate
-
-class TimeoutError(Exception):
- def __init__(self, output, error):
- super(TimeoutError, self).__init__('process timed out')
- self.output = output
- self.error = error
-
-class WaitTimeoutError(Exception):
- pass
-
-def kill_process(proc):
- proc.terminate()
- try:
- timed_wait(proc, 0.1)
- except WaitTimeoutError:
- proc.kill()
- try:
- timed_wait(proc, 0.1)
- except WaitTimeoutError:
- # This can happen if the process is stuck waiting inside a system
- # call for a long time. There isn't much we can do unless we want
- # to keep waiting forever. Just give up. The child process will
- # remain around as a zombie until we exit.
- pass
-
-def timed_wait(proc, timeout):
- # There unfortunately isn't a great way to wait for a process with a
- # timeout, other than polling. (Registering for SIGCHLD and sleeping might
- # be one option, but that's fragile and not thread-safe.)
- poll_interval = 0.1
- end_time = time.time() + timeout
- while True:
- if proc.poll() is not None:
- return
- time_left = max(end_time - time.time(), 0)
- if time_left <= 0:
- raise WaitTimeoutError()
- time.sleep(min(time_left, poll_interval))
-
-def timed_communicate(proc, timeout=DEFAULT_TIMEOUT):
- end_time = time.time() + timeout
-
- p = select.poll()
- outfd = proc.stdout.fileno()
- errfd = proc.stderr.fileno()
- p.register(outfd, select.POLLIN)
- p.register(errfd, select.POLLIN)
- results = {outfd: [], errfd: []}
- remaining_fds = set([outfd, errfd])
-
- bufsize = 4096
- while remaining_fds:
- time_left = max(end_time - time.time(), 0)
- r = p.poll(time_left * 1000) # poll() takes timeout in milliseconds
- if not r:
- kill_process(proc)
- raise TimeoutError(b''.join(results[outfd]),
- b''.join(results[errfd]))
- for fd, flags in r:
- # We didn't put the fds in non-blocking mode, but we know the fd
- # has data to read, so os.read() will return immediately.
- d = os.read(fd, bufsize)
- if d:
- results[fd].append(d)
- else:
- # EOF on this fd, stop listening on it
- p.unregister(fd)
- remaining_fds.remove(fd)
-
- try:
- timed_wait(proc, max(end_time - time.time(), 0))
- except WaitTimeoutError:
- kill_process(proc)
- raise TimeoutError(b''.join(results[outfd]),
- b''.join(results[errfd]))
-
- return b''.join(results[outfd]), b''.join(results[errfd])
OpenPOWER on IntegriCloud