# Copyright 2021 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.

# How to run
#   Run python3 populate_wificell_dashboard.py to and go to go/wifi-down the
    see devices that needs repair

# Troubleshooting
#   Check paths in constants.py
#   Make sure dhcp file is latest. (Do repo sync in the folder)
#   If a new tab is added in go/cros_conn_device_lifecycle, it has to be added
    to get_wifisheet_data.py
#   If number of wificell devices exceeded 1000, update swarming query in
    get_wificell_data.py
#   change logging level to DEBUG for more logs
#   debug_main can be used to write intermediate stages to file
#  Install luci client using instruction given below




# Instaling LUCI client
# https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/README.md
# 1) Install depot_tools
# 2) Got to deport_tools folder and execute the following commands
# 3) fetch infra
# 4) cd infra/go
# eval `./env.py`