-
-
Save ML-unife/7472f67c9f11be585b751f0197196d7a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Utilizzo: | |
| ekahau_add_survey.sh /path/to/project.esx /path/to/report.esx | |
| Descrizione: | |
| Travasa il survey presente in "report.esx" prodotto con WiProber nel | |
| progetto Ekahau "project.esx". | |
| Le immagini dei piani nei due progetti devono avere la stessa risoluzione. | |
| Consigliato usare lo stesso file, in questo caso lo script identifica | |
| automaticamente a quale piano del progetto si riferisce il survey. | |
| Diversamente lo script richiede quale sia il piano di interesse. | |
| Viene creata una copia di backup del progetto originario nella stessa | |
| cartella in cui si trova il file. | |
| Requisiti: comando jq (Command-line JSON processor) | |
| sudo apt install jq |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # funzione unisci FILE del progetto e del survey applicando il filtro specificato | |
| function json_merge() { | |
| local FILE=$1 | |
| local FILTER=$2 | |
| # copia il vecchio survey se presente in FILE_1 | |
| if [ -e "${PROJECT_TEMP_DIR}/${FILE}" ] | |
| then | |
| cp "${PROJECT_TEMP_DIR}/${FILE}" "${TEMP_DIR}/${FILE}_1" | |
| fi | |
| # copia il nuovo survey in FILE_2 | |
| cp "${SURVEY_TEMP_DIR}/${FILE}" "${TEMP_DIR}/${FILE}_2" | |
| # unisci tutto con filtro | |
| jq -s "$FILTER" "${TEMP_DIR}/${FILE}"* > "${TEMP_DIR}/new_${FILE}" | |
| mv "${TEMP_DIR}/new_${FILE}" "${PROJECT_TEMP_DIR}/${FILE}" | |
| } | |
| # gestisci gli errori | |
| set -euo pipefail | |
| err_handler() { | |
| echo "Errore script alla linea $(caller)" >&2 | |
| } | |
| TEMP_DIR=$(mktemp -d) | |
| trap err_handler ERR | |
| trap "rm -rf $TEMP_DIR" EXIT | |
| # errore se parametri mancanti | |
| if [ $# -lt 2 ] | |
| then | |
| echo -e "Usage: $0 progetto.esx survey.esx" | |
| exit | |
| fi | |
| # file passati come parametro | |
| PROJECT=$(realpath "$1") | |
| SURVEY=$(realpath "$2") | |
| PROJECT_PATH=$(dirname "$PROJECT") | |
| PROJECT_FILE=$(basename "$PROJECT") | |
| PROJECT_NAME=${PROJECT_FILE%.*} | |
| PROJECT_TEMP_DIR="${TEMP_DIR}/${PROJECT_NAME}" | |
| SURVEY_PATH=$(dirname "$SURVEY") | |
| SURVEY_FILE=$(basename "$SURVEY") | |
| SURVEY_NAME=${SURVEY_FILE%.*} | |
| SURVEY_TEMP_DIR="${TEMP_DIR}/${SURVEY_NAME}" | |
| # scompatta progetto e survey in directory temporanee di lavoro | |
| unzip -q "$PROJECT" -d "$PROJECT_TEMP_DIR" | |
| unzip -q "$SURVEY" -d "$SURVEY_TEMP_DIR" | |
| SURVEY_IMGFILE=image-$(jq -r '.floorPlans[0].imageId' "${SURVEY_TEMP_DIR}/floorPlans.json") | |
| SURVEY_IMGMD5=($(md5sum "${SURVEY_TEMP_DIR}/${SURVEY_IMGFILE}")) | |
| # ricava automaticamente il piano del progetto in cui è stato effettuato il survey | |
| PROJECT_FLOORID=0 | |
| for ID in $( jq -r '.floorPlans[].imageId' "${PROJECT_TEMP_DIR}/floorPlans.json" ) | |
| do | |
| PROJECT_IMGFILE=image-${ID} | |
| PROJECT_IMGMD5=($(md5sum "${PROJECT_TEMP_DIR}/${PROJECT_IMGFILE}")) | |
| if [ $PROJECT_IMGMD5 = $SURVEY_IMGMD5 ] | |
| then | |
| # ricavo id del piano | |
| PROJECT_FLOORID=$(jq ".floorPlans[] | select( .imageId == \"$ID\" ) | .id" "${PROJECT_TEMP_DIR}/floorPlans.json" ) | |
| PROJECT_FLOORNAME=$(jq ".floorPlans[] | select( .imageId == \"$ID\" ) | .name" "${PROJECT_TEMP_DIR}/floorPlans.json" ) | |
| echo "Survey relativo il piano $PROJECT_FLOORNAME" | |
| fi | |
| done | |
| # se non trovato, chiedi all'utente a quale piano si riferisce | |
| if [ $PROJECT_FLOORID = 0 ] | |
| then | |
| echo -e "Non ho trovato il piano in cui è stato prodotto $SURVEY_FILE\n" | |
| # copia i nomi dei piani in un array | |
| declare -a FLOORNAME | |
| readarray -t FLOORNAME < <(jq '.floorPlans[].name' "${PROJECT_TEMP_DIR}/floorPlans.json" | sort) | |
| # stampa i nomi dei piani | |
| echo "$PROJECT_FILE ha questi piani:" | |
| for (( I=0; I< "${#FLOORNAME[@]}" ; I++ )) | |
| do | |
| echo "$I ${FLOORNAME[$I]}" | |
| done | |
| # chiedi quale aggiornare | |
| echo -e -n "\nIl survey quale piano riguarda? " | |
| read SEL | |
| # ottieni l'id del piano selezionato | |
| PROJECT_FLOORID=$( jq ".floorPlans[] | select( .name == ${FLOORNAME[$SEL]} ) | .id" "${PROJECT_TEMP_DIR}/floorPlans.json" ) | |
| fi | |
| # ottieni id del piano del survey | |
| SURVEY_FLOORID=$( jq ".floorPlans[0].id" "${SURVEY_TEMP_DIR}/floorPlans.json" ) | |
| # merge json files | |
| json_merge "surveyLookups.json" "{surveyLookups: (map(.surveyLookups) | add | map(if .floorPlanId == $SURVEY_FLOORID then .floorPlanId = $PROJECT_FLOORID else . end))}" | |
| json_merge "wifiAdapterInformations.json" "{wifiAdapterInformations: (map(.wifiAdapterInformations) | add | unique_by(.id))}" | |
| json_merge "measuredRadios.json" "{measuredRadios: (map(.measuredRadios) | add)}" | |
| json_merge "accessPointMeasurements.json" "{accessPointMeasurements: (map(.accessPointMeasurements) | add)}" | |
| json_merge "accessPoints.json" "{accessPoints: (map(.accessPoints) | add | map(if .floorPlanId == $SURVEY_FLOORID then .floorPlanId = $PROJECT_FLOORID else . end))}" | |
| # travasa i survey-* nel progetto modificando l'identificativo del piano | |
| cd $SURVEY_TEMP_DIR | |
| for FILE in survey-* | |
| do | |
| jq ".surveys[].floorPlanId = $PROJECT_FLOORID" "$FILE" > "${PROJECT_TEMP_DIR}/${FILE}" | |
| done | |
| # travasa i track-* | |
| cp -a track-* "${PROJECT_TEMP_DIR}/" | |
| echo | |
| # crea backup esx | |
| BACKUP_FILE="${PROJECT_NAME}_$(date +%s).esx" | |
| mv -v "${PROJECT_PATH}/${PROJECT_FILE}" "${PROJECT_PATH}/${BACKUP_FILE}" | |
| # crea nuovo file esx | |
| DEST_FILE="${PROJECT_PATH}/${PROJECT_FILE}" | |
| echo "Aggiorno progetto $PROJECT_FILE" | |
| cd $PROJECT_TEMP_DIR | |
| rm -f "$DEST_FILE" | |
| zip -q "$DEST_FILE" * | |
| exit |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Questo script è un utility non ufficiale e non è in alcun modo affiliato,
autorizzato, mantenuto, sponsorizzato o approvato da Ekahau o dagli sviluppatori
di WiProber.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.