agora/contoso_hypermarket/charts/cerebral-api/templates/mssql-setup.yaml (162 lines of code) (raw):

apiVersion: v1 kind: ConfigMap metadata: name: mssql-setup-script namespace: contoso-hypermarket data: setup-sql.sh: | #!/bin/bash # Variables DB_HOST="mssql-service" DB_USER="SA" DB_PASS="$SA_PASSWORD" DB_NAME="RetailDB" # Wait until the database is ready until /opt/mssql-tools/bin/sqlcmd -S $DB_HOST -U $DB_USER -P $DB_PASS -Q "SELECT 1" &> /dev/null do echo "Waiting for the database to be ready..." sleep 30s done # Create the database echo "Database is ready. Creating the database $DB_NAME..." /opt/mssql-tools/bin/sqlcmd -S $DB_HOST -U $DB_USER -P $DB_PASS -Q "CREATE DATABASE $DB_NAME" # Wait 10 seconds before proceeding sleep 10s # Create the script.sql file with database structure and data insertion cat << EOF > script.sql USE $DB_NAME; -- Stores table CREATE TABLE Stores ( store_id VARCHAR(10) PRIMARY KEY, city VARCHAR(100), state VARCHAR(50), country VARCHAR(100) ); -- Products table CREATE TABLE Products ( product_id VARCHAR(50) PRIMARY KEY, name VARCHAR(200), category VARCHAR(100), price_min DECIMAL(10,2), price_max DECIMAL(10,2), stock INT, photo_path VARCHAR(500) ); -- Inventory table CREATE TABLE Inventory ( id INT IDENTITY(1,1) PRIMARY KEY, date_time DATETIME2, store_id VARCHAR(10), product_id VARCHAR(50), retail_price DECIMAL(10,2), in_stock INT, reorder_threshold INT, last_restocked DATETIME2, FOREIGN KEY (store_id) REFERENCES Stores(store_id), FOREIGN KEY (product_id) REFERENCES Products(product_id) ); -- Sales table CREATE TABLE Sales ( id INT IDENTITY(1,1) PRIMARY KEY, sale_id VARCHAR(50), sale_date DATETIME2, store_id VARCHAR(10), store_city VARCHAR(100), product_id VARCHAR(50), product_category VARCHAR(100), product_name VARCHAR(200), price DECIMAL(10,2), discount DECIMAL(5,2), quantity INT, item_total DECIMAL(10,2), profit DECIMAL(10,2), payment_method VARCHAR(50), customer_id VARCHAR(50), register_id VARCHAR(20), FOREIGN KEY (store_id) REFERENCES Stores(store_id), FOREIGN KEY (product_id) REFERENCES Products(product_id) ); -- Device Metrics table CREATE TABLE DeviceMetrics ( id INT IDENTITY(1,1) PRIMARY KEY, timestamp DATETIME2, device_id VARCHAR(50), equipment_type VARCHAR(50), metric_name VARCHAR(100), metric_value DECIMAL(18,4), metric_unit VARCHAR(20) ); -- Insert initial store data INSERT INTO Stores (store_id, city, state, country) VALUES ('CHI', 'Chicago', 'IL', 'United States'), ('SEA', 'Seattle', 'WA', 'United States'), ('NYC', 'New York City', 'NY', 'United States'), ('DAL', 'Dallas', 'TX', 'United States'), ('ATL', 'Atlanta', 'GA', 'United States'), ('LAS', 'Las Vegas', 'NV', 'United States'), ('MIA', 'Miami', 'FL', 'United States'), ('LAX', 'Los Angeles', 'CA', 'United States'); -- Insert initial product data INSERT INTO Products (product_id, name, price_min, price_max, stock, photo_path, category) VALUES ('1', 'Red Apple', 0.2, 0.4, 1000, 'static/img/product1.jpg', 'Fruits'), ('2', 'Banana', 0.15, 0.3, 2500, 'static/img/product2.jpg', 'Fruits'), ('3', 'Avocado', 0.7, 2.0, 500, 'static/img/product3.jpg', 'Vegetables'), ('4', 'Bread', 3.0, 5.0, 200, 'static/img/product4jpg', 'Bakery'), ('5', 'Milk', 2.5, 4.5, 200, 'static/img/product5.jpg', 'Dairy'), ('6', 'Orange Juice', 3.25, 4.75, 250, 'static/img/product6.jpg', 'Beverages'), ('7', 'Chips', 0.25, 0.75, 1000, 'static/img/product7.jpg', 'Snacks'), ('8', 'Red Pepper', 0.5, 1.5, 300, 'static/img/product8.jpg', 'Vegetables'), ('9', 'Lettuce', 0.2, 0.4, 200, 'static/img/product9.jpg', 'Vegetables'), ('10', 'Tomato', 0.3, 0.6, 2000, 'static/img/product10.jpg', 'Vegetables'), ('11', 'Strawberry', 2.0, 4.0, 1500, 'static/img/product11.jpg', 'Fruits'), ('12', 'Eggs', 3.0, 6.0, 1000, 'static/img/product12.jpg', 'Poultry'); -- Generate initial inventory for each store and product INSERT INTO Inventory (date_time, store_id, product_id, retail_price, in_stock, reorder_threshold, last_restocked) SELECT GETDATE() as date_time, s.store_id, p.product_id, (p.price_min + ((p.price_max - p.price_min) * 0.5)) as retail_price, p.stock as in_stock, FLOOR(p.stock * 0.2) as reorder_threshold, GETDATE() as last_restocked FROM Stores s CROSS JOIN Products p; -- Create indices for better performance CREATE INDEX IX_Inventory_DateTime ON Inventory(date_time); CREATE INDEX IX_Sales_DateTime ON Sales(sale_date); CREATE INDEX IX_DeviceMetrics_DateTime ON DeviceMetrics(timestamp); CREATE INDEX IX_DeviceMetrics_Device ON DeviceMetrics(device_id, equipment_type); EOF # Run the script file /opt/mssql-tools/bin/sqlcmd -S $DB_HOST -U $DB_USER -P $DB_PASS -i script.sql echo "Database setup and configuration completed." --- apiVersion: batch/v1 kind: Job metadata: name: mssql-setup-job namespace: contoso-hypermarket spec: template: spec: containers: - name: mssql-job image: mcr.microsoft.com/mssql-tools command: ["/bin/bash", "-c"] args: ["cp /mssql/data/setup-sql.sh /tmp/setup-sql.sh && chmod +x /tmp/setup-sql.sh && /tmp/setup-sql.sh"] volumeMounts: - name: script-volume mountPath: /mssql/data readOnly: true - name: tmp-volume mountPath: /tmp env: - name: ACCEPT_EULA value: "Y" - name: SA_PASSWORD valueFrom: secretKeyRef: name: azure-sqlpassword-secret key: azure-sqlpassword-secret restartPolicy: Never volumes: - name: script-volume configMap: name: mssql-setup-script - name: tmp-volume emptyDir: {} backoffLimit: 4