def status()

in source/Tools Integration/CE-Integration/Lambdas/CheckMachine.py [0:0]


def status(session, headers, endpoint, HOST, project_id, launchtype, dryrun, serverlist, relaunch):
    testservers = ""
    cutoverservers = ""
    nottested = ""
    machine_status = 0
    m = requests.get(HOST + endpoint.format('projects/{}/machines').format(project_id), headers=headers, cookies=session)
    for server in serverlist:
        machine_exist = False
        for machine in json.loads(m.text)["items"]:
           if server["server_name"].lower() == machine['sourceProperties']['name'].lower():
              machine_exist = True
              # Check if replication is done
              if 'lastConsistencyDateTime' not in machine['replicationInfo']:
                  return "ERROR: Machine: " + machine['sourceProperties']['name'] + " replication in progress, please wait for a few minutes...."
              else:
                  # check replication lag
                  a = int(machine['replicationInfo']['lastConsistencyDateTime'][11:13])
                  b = int(machine['replicationInfo']['lastConsistencyDateTime'][14:16])
                  x = int(datetime.datetime.utcnow().isoformat()[11:13])
                  y = int(datetime.datetime.utcnow().isoformat()[14:16])
                  result = (x - a) * 60 + (y - b)
                  if result > 180:
                      message = "ERROR: Machine: " + machine['sourceProperties']['name'] + " replication lag is more than 180 minutes...."
                      message = message + "- Current Replication lag for " + machine['sourceProperties']['name'] + " is: " + str(result) + " minutes...."
                      return message
                  else:
                    # Check dryrun flag and skip the rest of checks
                    if dryrun.lower() == "yes":
                       machine_status += 1
                    else:
                        if (relaunch == False):
                            # Check if the target machine has been tested already
                            if launchtype == "test":
                                if 'lastTestLaunchDateTime' not in machine["lifeCycle"] and 'lastCutoverDateTime' not in machine["lifeCycle"]:
                                    machine_status += 1
                                else:
                                    testservers = testservers + server["server_name"] + ","
                            # Check if the target machine has been migrated to PROD already
                            elif launchtype == "cutover":
                                if 'lastTestLaunchDateTime' in machine["lifeCycle"]:
                                    if 'lastCutoverDateTime' not in machine["lifeCycle"]:
                                        machine_status += 1
                                    else:
                                        cutoverservers = cutoverservers + server["server_name"] + ","
                                else:
                                    nottested = nottested + server["server_name"] + ","
                        else:
                            machine_status += 1
        if machine_exist == False:
               return "ERROR: Machine: " + server["server_name"] + " does not exist in CloudEndure...."

    if launchtype == "test":
        if len(testservers) > 0:
           testservers = testservers[:-1]
           return "ERROR: Machine: " + testservers + " has been tested already...."
    if launchtype == "cutover":
        if len(cutoverservers) > 0 and len(nottested) == 0:
           cutoverservers = cutoverservers[:-1]
           return "ERROR: Machine: " + cutoverservers + " has been migrated already...."
        if len(cutoverservers) > 0 and len(nottested) > 0:
           cutoverservers = cutoverservers[:-1]
           nottested = nottested[:-1]
           return "ERROR: Machine: " + cutoverservers + " has been migrated already | ERROR: Machine: " + nottested + " has not been tested...."
        if len(cutoverservers) == 0 and len(nottested) > 0:
           nottested = nottested[:-1]
           return "ERROR: Machine: " + nottested + " has not been tested...."

    if machine_status == len(serverlist):
       print("All Machines are ready....")
       print("")
    else:
       return "ERROR: some machines are not ready...."