code: func (nc *Controller) ComputeZoneState(nodeReadyConditions []*v1.NodeCondition) (int, ZoneState) {
  	readyNodes := 0
  	notReadyNodes := 0
  	for i := range nodeReadyConditions {
  		if nodeReadyConditions[i] != nil && nodeReadyConditions[i].Status == v1.ConditionTrue {
  			readyNodes++
  		} else {
  			notReadyNodes++
  		}
  	}
  	switch {
  	case readyNodes == 0 && notReadyNodes > 0:
  		return notReadyNodes, stateFullDisruption
  	case notReadyNodes > 2 && float32(notReadyNodes)/float32(notReadyNodes+readyNodes) >= nc.unhealthyZoneThreshold:
  		return notReadyNodes, statePartialDisruption
  	default:
  		return notReadyNodes, stateNormal
  	}
  }
docs: // ComputeZoneState returns a slice of NodeReadyConditions for all Nodes in a given zone.
  // The zone is considered:
  // - fullyDisrupted if there're no Ready Nodes,
  // - partiallyDisrupted if at least than nc.unhealthyZoneThreshold percent of Nodes are not Ready,
  // - normal otherwise