#!/usr/bin/env python
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Network utilities."""

import logging
import re
import subprocess


def HasIp():
  """Checks if system has IP on eth0.

  Returns:
    True if system has IP, false otherwise.
  """
  ip_output = subprocess.check_output(['ip', 'addr', 'show', 'dev', 'eth0'])

  # Pattern is like " inet 100.102.7.163/25 scope global eth0"
  match = re.search(r'^\s+inet ([.0-9]+)/[0-9]+', ip_output.decode('utf-8'), re.MULTILINE)
  if match:
    ip_address = match.group(1)
    logging.debug('Get IP %s', ip_address)
    return True
  else:
    logging.warning('Can not get IP. Should restart networking.')
    return False


def RestartNetwork():
  """Restarts networking daemon."""
  logging.warning('Restart networking.')
  try:
    subprocess.check_output(['/etc/init.d/networking', 'restart'])
    if HasIp():
      logging.info('Network is back')
  except subprocess.CalledProcessError as e:
    # This is expected in some network environment.
    logging.warning(e.output)
    if 'No lease, failing' in e.output:
      logging.warning('Can not get network, maybe try again later.')
    else:
      raise


def PossiblyRestartNetwork():
  """Checks network status and possibly restarts networking daemon."""
  if not HasIp():
    RestartNetwork()
