GCP : error PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR when trying to Connect a Cloud functions 2nd gen to a Cloud SQL Database

GCP error PROTOCOL ENQUEUE AFTER FATAL ERROR when trying to Connect a Cloud functions 2nd gen to a Cloud SQL Database - GCP : error PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR when trying to Connect a Cloud functions 2nd gen to a Cloud SQL Database

Example with a Node.js Cloud Function with the mysql dependency deployed as a 2nd gend Cloud Function.

const mysql = require('mysql');

const connectionConfig = {
    user: 'test',
    password: 'test',
    database: 'my-db',
    socketPath: '/cloudsql/deddy-exelcia:us-central1:my-db'
};

const connection = mysql.createConnection(connectionConfig);

exports.retrieveUsers = async (event, context) => {
    // Retrieve users
    connection.query(
        'SELECT * FROM users',
        (error, results) => {
            if (error) {
                console.error('Error retrieve users from database error :', error);
            } else {
                console.log(`Results : ${results}.`);
            }
        }
    );
};
{
  "name": "retrieve-users",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "mysql": "^2.18.1"
  }
}

If you get the error PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR

Error updating database: Error: Cannot enqueue Query after fatal error.
    at Protocol._validateEnqueue (/workspace/node_modules/mysql/lib/protocol/Protocol.js:212:16)
    at Protocol._enqueue (/workspace/node_modules/mysql/lib/protocol/Protocol.js:138:13)
    at Connection.query (/workspace/node_modules/mysql/lib/Connection.js:198:25)
    at exports.updateCarAvailability (/workspace/index.js:29:16)
    at /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/function_wrappers.js:141:25
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  code: 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR',
  fatal: false

Solution

You must add your Cloud SQL database instance in the “CloudSQL Connections” parameter of the Cloud Run service generated by the creation of your Cloud Functions 2nd gen.

Creating a 2nd gen Cloud Function generates a Cloud Run service, but for a Cloud Run service to access a Cloud SQL instance it is necessary to configure the “Cloud SQL Connections” parameter.

  • Go to Cloud Run
  • Locate the Cloud Run service which has the same name as your Cloud Function
  • Access the service setting
  • “Cloud SQL connections” parameter > Add the connection to your Cloud SQL database instance.
  • Click on Save

Cloud SQL connections setting

How to trigger a mouse click on Option Tag Element on Select tag HTML Element?

In scraping simulate a click in a list of element of a Select HTML tag is tricky. Here is a workaround to trigger the select value change.

const selectTag = document.querySelector('select');

const optionTags = [...selectTag.querySelectorAll('option')];
optionTags[0].selected = true;

Now your Select list contains a selected option. Then you can trigger a form submit or click on a button.

Sometimes the select list accept multiple selected value option.

References :

  • https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option#selected
  • https://developer.mozilla.org/fr/docs/Web/API/HTMLSelectElement/selectedIndex

How to use the AWS S3 JS SDK with Wasabi Cloud ?

How to use @aws-sdk/client-s3 with Wasabi Cloud S3

ACCESS_KEY_ID et SECRET_ACCESS_KEY must be created on your Wasabi console.

WASABI_ENDPOINT must be of the format : https://s3.<bucket_region>.wasabisys.com .

S3-wasabi-client.mjs example

import { S3Client } from '@aws-sdk/client-s3';

const { 
	S3_REGION = 'us-east-1',
	ACCESS_KEY_ID="YOUR ACCESS KEY",
	SECRET_ACCESS_KEY="YOUR SECRET ACCESS KEY",
	WASABI_ENDPOINT="https://s3.eu-west-2.wasabisys.com"
 } = process.env;

const s3WasabiClient = new S3Client({
    region: S3_REGION,
    apiVersion: '2006-03-01',
    credentials: {
        accessKeyId: ACCESS_KEY_ID,
        secretAccessKey: SECRET_ACCESS_KEY
    },
    endpoint: WASABI_ENDPOINT
});

export { s3WasabiClient };

List all objects in the bucket “bucket_name”

import { s3WasabiClient } from './s3-wasabi-client.mjs';
import { ListObjectsCommand } from '@aws-sdk/client-s3';

const listObjectsCommand = new ListObjectsCommand('bucket_name', '');
const data = await s3WasabiClient.send(listObjectsCommand);
if(data.Contents) {
	console.log('data : ', data.Contents);
}

Automatiser la Copie de Fichiers depuis Windows vers Stockage Cloud AWS S3

Besoin

Les fichiers du dossier partagé Windows doivent être copiés sur un stockage Bucket AWS S3, afin d’être utilisée dans une autre application. Comment automatiser la copie de ces fichiers sur le stockage S3 de façon récurrente ?

Contexte

  • L’application ERP/CRM effectue des exports chaque jour dans un dossier partagé. Lors de l’export, les fichiers existants sont écrasés.
  • Les fichiers peuvent avoir une taille atteignant 140 Mo.
  • Le dossier partagé se trouve sur un serveur Windows Server 2019.

Solution 1 : Power Automate et Passerelle de données locale

À l’aide de Power Automate, on peut configurer un “Flow”. Responsable de surveiller lorsque des nouveaux fichiers sont ajoutés ou modifiés dans un dossier, et d’envoyer vers S3 par le biais d’une connexion SFTP.

Étant donné que le dossier partagé n’est pas un dossier SharePoint ou OneDrive, il est nécessaire d’installer une “Passerelle de données locale/On Premises Data Gateway” sur le serveur. Il fera le lien entre le système de fichier et Power Automate.

Cependant, il existe une limite au niveau de la taille des fichiers que peut traiter la passerelle, la limite est de 30 Mo maximum par fichier. Au sein de Power Automate, il existe aussi une limite sur la taille des messages qui est fixé à 100 Mo.

La solution Power Automate la plus simple à mettre en place, de par son interface graphique intuitive. Mais aussi pour sa facilité à surveiller l’état de l’automatisme configuré, ne sera pas adapté pour ce cas.

Solution 2 : rclone et planificateur de tâches Windows

L’outil en ligne de commande Rclone couplé au planificateur de tâches Windows. Rclone permet de synchroniser ou de copier des fichiers en local vers un cloud provider. Le planificateur de tâches Windows, quant à lui permettra de configurer la fréquence a laquelle la commande Rclone doit être exécutée.

  1. Télécharger rclone et extraire l’archive

    1. Ajouter le chemin vers le dossier rclone dans le PATH
  2. Configurer un “remote” rclone en lancant la commande rclone config 1.

    rclone config
    # n / New remote
    n/s/q/> n
    # Enter remote name s3-rclone-automatisation-test
    name> s3-rclone-automatisation-test
    # Storage
    # 5 / Amazon S3 Compliant Storage providers inluding AWS, Alibaba ...
    Storage> 5
    # provider
    # 1 / Amazon Web Services (AWS) S3
    provider> 1
    # AWS Credentials
    # 1 / Enter AWS credentials in the next step.
    env_auth> tape Enter for 1
    # AWS Access Key ID
    access_key_id> your_access_key_id
    # AWS Secret Access Key (password)
    secret_access_key> your_secret_key
    # Region to connect to
    # 8/ EU (Paris) Region. (eu-west-3)
    Region> 8
    # Endpoint
    endpoint > (Enter to leave empty)
    # Location constraint - must be set to match the Region
    location_constraint> 8
    # ACL
    acl> (Enter to leave empty)
    # The server-side encryption algorithm used when storing the object in S3.
    server_side_encryption> (Enter to leave empty)
    # If using KMS ID you must provide the ARN of Key
    sse_kms_key_id> (Enter to leave empty)
    #The storage class to use when storing new objects in S3.
    storage_class> (Enter to leave empty)
    # Edit advanced config ?
    y/n> (Enter to use No default answer)
    # Configuration complete.
    # Keep this "s3-rclone-automatisation-test" remote ?
    y/e/d> (Enter to use Yes this is OK default answer)
    # Current remotes :
    # q / Quit config
    e/n/d/r/c/s/q> q
    
  3. Lancer votre commande de copie : rclone copy source:path dest:path [flags]

Exemple de commande rclone copy :

# Dossier source ou sont contenus les fichiers à copier : C:\Users\Administrator\Downloads\sync-folder
# Nom du "Remote" configuré dans rclone : s3-rclone-automatisation-test
# Nom du bucket S3 : rclone-automatisation-test
# Commande : 
C:\Users\Administrator\Downloads\rclone-v1.64.0-windows-amd64\rclone copy --progress --checksum -vv C:\Users\Administrator\Downloads\sync-folder s3-rclone-automatisation-test:rclone-automatisation-test
  1. Ouvrir le planificateur des tâches Windows
  2. Créer une tâche planifié.
  3. Configurer un Déclencheur :
    1. Lancer la tâche : à l’heure programmée
    2. Paramètres : Chaque jour
    3. Démarrer : Spécifier une heure dans la journée.
    4. Cocher la case : Activée
    5. (optionnel) Pour les besoins de test :
      1. Cocher la case “Répéter la tâche toutes les” : 5 minutes
      2. Pour une durée de : Indéfiniment
  4. Configurer une Action :
    1. Action : Démarrer un programme
    2. Programme/script (spécifier le chemin complet) : C:\Users\Administrator\Downloads\rclone-v1.64.0-windows-amd64\rclone
    3. Ajouter des arguments : copy –checksum -v C:\Users\Administrator\Downloads\sync-folder s3-rclone-automatisation-test:rclone-automatisation-test

Remarque : Activer l’historique de la tâche planifié, en créant un dossier dans l’arborescence “Bibliothèque du Planificateur de tâches”. Puis en créant la tâche dans ce dossier. Ensuite Clique droit sur le dossier > Activer l’historique de toutes les tâches.

Commandes Utiles

  • rclone config file : Affiche l’emplacement du fichier de configuration de rclone.
  • rclone listremotes : Affiche la liste des “remotes” configurés.

Prestashop 1.7.8.7 – import produit avec image – Erreur l’image ne peut pas être enregistrée

Message d’erreur lors de l’import de produit avec images

• Produit n°22 : l’image (http://exemple.fr/img/p/reference-1.jpg) ne peut pas être enregistrée.

Technical error: Unexpected response returned by server. Import stopped.

Duplicate entry '22-1-1' for key 'id_product'<br /><br /><pre>INSERT INTO `ps_image_shop` (`id_image`, `id_product`, `cover`, `id_shop`) VALUES ('39', '22', '1', '1')</pre>

Cette erreur peut survenir lorsque l’image a été supprimée dans la base de données dans la table ps_image, mais qu’elle n’a pas été supprimé dans la table ps_image_shop

Exemple commande SQL Afficher/Supprimer les images produits depuis la base de données.

SELECT * FROM ps_image WHERE id_product in (21,22)
SELECT * FROM ps_image_shop WHERE id_product in (21,22)

// DELETE

DELETE FROM ps_image WHERE id_product in (21,22)
DELETE FROM ps_image_shop WHERE id_product in (21,22)

promoguadeloupe.com – Application mobile Hybride et site web PWA – Spécifications

Spécifications fonctionnelles

Historique :

  • V0
    • Site blog sur le CMS Ghost, les vidéos sont envoyées automatiquement via l’API Ghost. Le thème s’affiche en mode timeline, cependant le site est très lent, car il doit charger le lecteur YouTube. Il n’est pas très optimisé sur mobile.
  • V1
    • Développement d’un site web orienté mobile sur mesure.
    • Ajout des fonctionnalités PWA.
    • Déploiement sur le PlayStore.
    • Pas de déploiement sur l’AppStore car pas de Mac à disposition.

Pages

  • Hot or Not
  • Nouveautés
  • Artistes
  • FAQ
  • Politique de confidentialité
  • Mentions légales
  • Crédits

Fonctionnalités

  • Chaque jour, notifications push sur PWA et Application mobile Lorsque de nouvelle vidéo sont disponible dans l’application.
  • Chaque jour, récupération des dernières vidéos publiées sur les chaînes surveillées.
  • L’utilisateur peut suggérer une nouvelle chaine YouTube dans l’application.
  • L’utilisateur peut consulter l’ensemble des chaînes répertorié dans l’application.
  • L’utilisateur peut consulter les vidéos publiés sur les 7 derniers jours.
  • Un mode d’affichage avec petite vignette des vidéos pour l’utilisation ordinateur.
  • Un mode d’affichage avec des grosses vignette des vidéos pour l’utilisation sur mobile
  • L’utilisateur peut choisir de s’abonner/désabonner au notification push depuis l’application.
  • Chaque jour, publication sur les réseaux sociaux automatique du lien des dernières vidéos. ⏸
  • L’utilisateur peut voter (like/dislike) une vidéo

Spécifications Techniques

Schéma d’architecture promoguadeloupe.com

promoguadeloupe Schema darchitecture - promoguadeloupe.com - Application mobile Hybride et site web PWA - Spécifications

API REST FortiGate POST system/api-user/generate-key – Resolve the error 403

API-FortiGate-POST-systemapi-usergenerate-key-–-Resolve-the-error-403.jpg

When you try to generate a new API Key for an API-user in FortiGate using the API REST, you may encounter a 403 error

{
    "http_method": "POST",
    "status": "error",
    "http_status": 403,
    "vdom": "root",
    "path": "system",
    "name": "api-user",
    "action": "generate-key",
    "serial": "FGTXXXXXXXXXXXXXX",
    "version": "v7.2.4",
    "build": 1396
}

This error occurs when the user making the API call does not have the necessary permissions. When creating an API user through the Fortigate GUI, you cannot assign the super_admin profile as it is not visible in the select list. The only way to assign this profile is through the CLI.

The problem has been discussed in this forum post: community.fortinet.com/t5/Support-Forum/API-request-of-new-token/m-p/242109#M205093. However, here is a more detailed procedure.

Solution : set the accprofile “super_admin” on the API-user account

How to set the super_admin profile on the API-user via the CLI on FortiGate ?

Connect to the fortigate, open the CLI and run the following commands :

  1. config system api-user

  2. edit "<the_api_rest_user_to_modify>"

  3. set accprofile "super_admin"

  4. end

  5. now you can make API request to generate api-key with that user.

    1. Example request on Fortigate v7.2.4 : POST https:/**/{{ADDRESS}}**/api/v2/monitor/system/api-user/generate-key?api-user=**{{API_REST_ADMIN_USERNAME}}**&vdom=root
  6. If you run show command, you should see something similar to this.

    Example with API-USER "rest_api_admin" :

config system api-user
    edit "rest_api_admin"
        set api-key ENC SH2FG4KXXXXXXXXXXXXXXXXXXXXXXXXX
        set accprofile "super_admin"
        set vdom "root"
    next
end

Préparer et réussir la Certification AWS Cloud Practitioner en seulement 1 mois

Préparer et réussir la Certification AWS Cloud Practitioner en seulement 1 mois

À qui s’adresse la certification Cloud Practitioner de AWS ?

La certification Cloud Practitioner est une certification AWS de base qui permet aux professionnels de l’informatique et non-informaticiens. (Développeurs, chefs de projet, et commerciaux). De comprendre les services AWS et les concepts de cloud computing. Elle est adaptée pour ceux qui cherchent à se familiariser avec les concepts de base du cloud computing, ainsi qu’aux personnes qui cherchent à valider leurs connaissances en matière de services AWS de base tels que S3, EC2, RDS et AWS Lambda.

Pourquoi vous avez tout intérêt à passer la certification ?

La certification Cloud Practitioner vous permettra de démontrer votre compréhension des concepts de base du cloud computing et des services AWS. Cela peut être un atout pour votre carrière professionnelle, de nombreuses entreprises migrent vers des solutions cloud et ont besoin de professionnels compétents pour gérer ces services. En obtenant la certification AWS Cloud Practitioner, vous pouvez vous démarquer en tant que candidat qualifié pour des postes impliquant l’utilisation de services cloud AWS.

Préparez-vous en 4 semaines

Je vous propose un plan en 4 semaines pour préparer et passer la certification AWS Cloud Practitioner. Les deux premières semaines consistent à regarder les vidéos de formation en accéléré, à installer des applications de QCM et à pratiquer régulièrement. La troisième semaine, il est recommandé de souscrire à l’abonnement SkillBuilder et de passer un examen blanc avant de suivre le cours. La quatrième semaine, il est conseillé de programmer une date d’examen, de réviser les sujets sur lesquels on a des doutes et de repasser l’examen blanc la veille de l’examen réel.

Semaine 1 & 2

  1. Préparez-vous en même temps qu’un collègue et challengez-vous en vous posant des questions.
  2. Mettez les vidéos des formations Learning Path en vitesse accélérée et valeur maximale. 1h00-2h00 par jour.
  3. Notez à l’écrit, sur un vrai cahier en papier, ce que vous avez retenu. “Les paroles s’envolent, les écrits restent.”
  4. Installer des applications de type QCM “Cloud Practitioner Exam Prep” sur votre téléphone. Disponible en grand nombre en version payante et gratuite.
  5. Pratiquez les QCM quand vous allez aux toilettes, en pause, avant d’aller dormir, et au réveil.
  6. Notez les sujets sur lesquels vous avez toujours un doute et documentez vous jusqu’à devenir incollable.

Semaine 3

  1. Souscrivez à l’abonnement SkillBuilder.aws vous pouvez résilier l’abonnement avant le renouvellement.
  2. Passer l’examen blanc 1 seule fois, avant de suivre le cours récapitulatif et identifiez vos lacunes.
  3. Suivez le récapitulatif pour l’examen Cloud Practitioner (uniquement disponible avec l’abonnement SkillBuilder) il contient des tests intermédiaires et un examen blanc.
  4. Suivez le cours et attardez vous sur les sujets ou vous avez des lacunes.

Semaine 4

  1. Programmez une date d’examen et inscrivez-vous, même si vous n’êtes pas prêt. Savoir que la date a été fixée vous n’aurez plus le choix, débrouillez vous pour être prêt le jour J.
  2. Repasser l’examen blanc à J-1 de la date d’examen, pour vous remettre dans le bain.
  3. Passez votre examen et réussissez !

Get X & Y coordinates point in PDF document with Inkscape

Get X Y coordinates point in PDF document with Inkscape article cover - Get X & Y coordinates point in PDF document with Inkscape

How to know the X and Y coordinates point in a PDF document

If you work with PDF-lib.js you may need to know the X and Y coordinates point in a PDF document.

There is a tip to show the coordinates with InkScape for Windows. Inkscape is also available for Linux.

Download at https://inkscape.org/fr.

  1. Open your PDF file with InkScape
  2. On the popup screen Check Import Poppler/Cairo
inkscape Get X Y coordinates point in PDF document with Inkscape import do do that - Get X & Y coordinates point in PDF document with Inkscape
Get X Y coordinates point in PDF document with Inkscape import do do that - Get X & Y coordinates point in PDF document with Inkscape

3. In File > Document Properties .. > Verify that pt is selected in Format and Display units. And scale must be set to 1,000000

Get X Y coordinates point in PDF document with Inkscape propriete document verify point et echelle - Get X & Y coordinates point in PDF document with Inkscape

4. Now you can see at the bottom right of the screen the X and Y coordinates.