simplify hooks (wip)
This commit is contained in:
		
							parent
							
								
									0913b8eab9
								
							
						
					
					
						commit
						c78dc87575
					
				
					 15 changed files with 151 additions and 42 deletions
				
			
		| 
						 | 
				
			
			@ -84,15 +84,15 @@ start_hook_daemon(){
 | 
			
		|||
  $0 infinite 86400 hook daily &
 | 
			
		||||
  $0 infinite 3600  hook hourly &
 | 
			
		||||
  # trigger hooks when files change in /mnt
 | 
			
		||||
  find /mnt -type d -mindepth 1 -maxdepth 1 | while read dir; do 
 | 
			
		||||
    echocolor "[$APPNAME]" "listening to inotify events in $dir"
 | 
			
		||||
    # scan for '/mnt/experiences/creatorname/#234/ MODIFY foo.glb' e.g.
 | 
			
		||||
    # scan for '/mnt/experiences/creatorname/#234/ MOVED_TO foo.glb' e.g.
 | 
			
		||||
    inotifywait -r -m $dir | awk '/.*/ { print $0 }; $2 ~ /(CREATE|MODIFY|MOVED_TO|DELETE)/ && $3 ~ /datapackage/ { system("'$0' hook datapackage_"$2" "$1""$3) }' &
 | 
			
		||||
  done
 | 
			
		||||
  #find /mnt -type d -mindepth 1 -maxdepth 1 | while read dir; do 
 | 
			
		||||
  #  echocolor "[$APPNAME]" "listening to inotify events in $dir"
 | 
			
		||||
  #  # scan for '/mnt/experiences/creatorname/#234/ MODIFY foo.glb' e.g.
 | 
			
		||||
  #  # scan for '/mnt/experiences/creatorname/#234/ MOVED_TO foo.glb' e.g.
 | 
			
		||||
  #  inotifywait -r -m $dir | awk '/.*/ { print $0 }; $2 ~ /(CREATE|MODIFY|MOVED_TO|DELETE)/ && $3 ~ /datapackage/ { system("'$0' hook datapackage_"$2" "$1""$3) }' &
 | 
			
		||||
  #done
 | 
			
		||||
 | 
			
		||||
  # force-trigger processing hooks in /mnt
 | 
			
		||||
  find /mnt | grep datapackage | xargs -n1 $0 hook inotify_MODIFY
 | 
			
		||||
  ## force-trigger processing hooks in /mnt
 | 
			
		||||
  #find /mnt | grep datapackage | xargs -n1 $0 hook inotify_MODIFY
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								manyfold/root/hook.d/daily/cleanup_taskspooler.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								manyfold/root/hook.d/daily/cleanup_taskspooler.sh
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# remove succesful tasks
 | 
			
		||||
ts | awk '$4 == 0 { print $1 }' | xargs -n1 ts -r
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
../hourly/placeholder.sh
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
test -f "$1".zip && rm "$1".zip
 | 
			
		||||
echo "[cleanup_package.sh] deleting $dir.zip"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
echo "$1" | grep -E 'datapackage|glb$' || exit 0 # nothing to do
 | 
			
		||||
dir=$(dirname $1)
 | 
			
		||||
cd "$dir"
 | 
			
		||||
echo "[v] reset log.txt"
 | 
			
		||||
date > log.txt
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
echo "$1" | grep -E 'datapackage|glb$' || exit 0 # nothing to do
 | 
			
		||||
dir=$(dirname $1)
 | 
			
		||||
cd "$dir"
 | 
			
		||||
echo "[v] scan (new) files of model"
 | 
			
		||||
id="$(basename "$dir" | sed 's/\#//g')"
 | 
			
		||||
echo "Model.find(id).add_new_files_later()" | /usr/src/app/bin/rails console
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
datapackage_MODIFY
 | 
			
		||||
							
								
								
									
										4
									
								
								manyfold/root/hook.d/experience_updated/10-reset-log.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								manyfold/root/hook.d/experience_updated/10-reset-log.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
cd "$1"
 | 
			
		||||
echo "[v] reset log.txt"
 | 
			
		||||
date > log.txt
 | 
			
		||||
							
								
								
									
										5
									
								
								manyfold/root/hook.d/experience_updated/1000-scan-dir.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								manyfold/root/hook.d/experience_updated/1000-scan-dir.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
cd "$1"
 | 
			
		||||
echo "[v] scan (new) files of model"
 | 
			
		||||
id="$(basename "$dir" | sed 's/\#//g')"
 | 
			
		||||
#echo "Model.find(id).add_new_files_later()" | /usr/src/app/bin/rails console
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
echo "$1" | grep -E 'datapackage|glb$' || exit 0 # nothing to do
 | 
			
		||||
dir=$(dirname $1)
 | 
			
		||||
dir="$1"
 | 
			
		||||
cd "$dir"
 | 
			
		||||
echo "[package_experience.sh] zipping $dir.zip"
 | 
			
		||||
zip -r "$dir".zip $dir/*
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
echo "$1" | grep -E 'datapackage|glb$' || exit 0 # nothing to do
 | 
			
		||||
dir=$(dirname $1)
 | 
			
		||||
dir="$1"
 | 
			
		||||
cd "$dir"
 | 
			
		||||
echo "[package_experience.sh] zipping $dir.zip"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
echo "$1" | grep -E 'datapackage|glb$' || exit 0 # nothing to do
 | 
			
		||||
dir=$(dirname $1)
 | 
			
		||||
dir="$1"
 | 
			
		||||
cd "$dir"
 | 
			
		||||
echo "[package_janusxr.sh] packing janusxr.html"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5,11 +5,12 @@ require_relative './../../xrforge.rb'
 | 
			
		|||
 | 
			
		||||
# Check if a filename is provided
 | 
			
		||||
if ARGV.length != 1
 | 
			
		||||
  puts "Usage: #{$0} <path/to/datapackage.json>"
 | 
			
		||||
  puts "Usage: #{$0} <path/to/experience>"
 | 
			
		||||
  exit 1
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
filename = ARGV[0]
 | 
			
		||||
dir = ARGV[0]
 | 
			
		||||
filename = "#{dir}/datapackage.json"
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  # Read and parse the JSON file
 | 
			
		||||
| 
						 | 
				
			
			@ -6,21 +6,33 @@ Rails.application.config.to_prepare do
 | 
			
		|||
 | 
			
		||||
  # extend by adding listeners 
 | 
			
		||||
  class Model
 | 
			
		||||
    # The 'after_save' macro is now run within the context of the existing Model class.
 | 
			
		||||
 | 
			
		||||
    attr_accessor :last_action_execution_time
 | 
			
		||||
 | 
			
		||||
    # The macro is now run within the context of the existing Model class.
 | 
			
		||||
    after_commit :run_cli_hooks
 | 
			
		||||
 | 
			
		||||
    # Define the new method to be executed on save.
 | 
			
		||||
    def run_cli_hooks
 | 
			
		||||
      # Your custom logic to execute after Model.save or Model.update! goes here.
 | 
			
		||||
      
 | 
			
		||||
      # 📝 Example Logic:
 | 
			
		||||
      puts "\n-------- MODEL --------- #{self.id}\n\n"
 | 
			
		||||
      pp self
 | 
			
		||||
      puts "\n\n"
 | 
			
		||||
      now = Time.current
 | 
			
		||||
      rate_limit_seconds = 2.0
 | 
			
		||||
      last_run_time = @last_action_execution_time
 | 
			
		||||
    
 | 
			
		||||
      command = "pwd"
 | 
			
		||||
      system(command)
 | 
			
		||||
      if self.path.match('#') 
 | 
			
		||||
        if last_run_time.nil? || (now - last_run_time) > rate_limit_seconds
 | 
			
		||||
          self.last_action_execution_time = now
 | 
			
		||||
        
 | 
			
		||||
          # 📝 Example Logic:
 | 
			
		||||
          puts "\n-------- MODEL --------- #{self.id} #{self.path}\n\n"
 | 
			
		||||
          pp self
 | 
			
		||||
          puts "\n\n"
 | 
			
		||||
 | 
			
		||||
          command = "TS_SLOTS=5 ts /manyfold/cli/manyfold.sh hook experience_updated #{self.library.path}/#{self.path} &"
 | 
			
		||||
          system(command)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										105
									
								
								manyfold/usr/src/app/config/locales/models/en.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								manyfold/usr/src/app/config/locales/models/en.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,105 @@
 | 
			
		|||
---
 | 
			
		||||
en:
 | 
			
		||||
  models:
 | 
			
		||||
    bulk_edit:
 | 
			
		||||
      description: 'Select models to change:'
 | 
			
		||||
      form_subtitle: 'Select changes to make:'
 | 
			
		||||
      merge: Merge selected models
 | 
			
		||||
      needs_organizing: Needs organizing
 | 
			
		||||
      remove_tags: Remove tags
 | 
			
		||||
      select: Select model '%{name}'
 | 
			
		||||
      select_all: Select all models
 | 
			
		||||
      submit: Update Selected Experiences
 | 
			
		||||
      title: Bulk Edit Experiences
 | 
			
		||||
      update_all: Update All %{count} Experiences
 | 
			
		||||
    bulk_fields:
 | 
			
		||||
      add_tags: Add tags
 | 
			
		||||
    bulk_update:
 | 
			
		||||
      success: Experiences updated successfully.
 | 
			
		||||
    configure_merge:
 | 
			
		||||
      common_root:
 | 
			
		||||
        description: The models will be combined into a single one in the shared root folder
 | 
			
		||||
        title: New model in common root folder
 | 
			
		||||
      description: Select one of the models to merge the others into, or create a new one.
 | 
			
		||||
      heading: Merge models
 | 
			
		||||
      new_model:
 | 
			
		||||
        description: A new model will be created from the combined data, and automatically organised on disk.
 | 
			
		||||
        title: New model
 | 
			
		||||
    create:
 | 
			
		||||
      success: File(s) uploaded successfully.
 | 
			
		||||
    destroy:
 | 
			
		||||
      confirm: This will delete associated files if they exist on disk. Are you sure you want to continue?
 | 
			
		||||
      success: Model deleted!
 | 
			
		||||
    file:
 | 
			
		||||
      delete: Delete file
 | 
			
		||||
      edit: Edit file
 | 
			
		||||
      open_button:
 | 
			
		||||
        label: View details for %{name}
 | 
			
		||||
        text: Open
 | 
			
		||||
      presupported: Presupported Version
 | 
			
		||||
      set_as_preview: Set as preview
 | 
			
		||||
    form:
 | 
			
		||||
      notes:
 | 
			
		||||
        help_html: You can use <a href="https://www.markdownguide.org/cheat-sheet/" target="markdown">Markdown</a>.
 | 
			
		||||
      preview_file:
 | 
			
		||||
        help: The file displayed as a model preview in library pages
 | 
			
		||||
      tags: Tags
 | 
			
		||||
    general:
 | 
			
		||||
      edit: Edit Model
 | 
			
		||||
    image_carousel:
 | 
			
		||||
      next: Next
 | 
			
		||||
      play_pause: Play or pause images
 | 
			
		||||
      previous: Previous
 | 
			
		||||
      select_slide: Choose image to display
 | 
			
		||||
      slide_label: "%{name} (%{index} of %{count})"
 | 
			
		||||
    list:
 | 
			
		||||
      bulk_edit: Edit All Experiences
 | 
			
		||||
      no_results_html: Sorry, we couldn't find anything to show you! Try changing your filters or search terms, or uploading some models.
 | 
			
		||||
      no_results_signed_out_html: Sorry, we couldn't find anything to show you! There might be more to see if you <a href="%{link}">sign in</a>.
 | 
			
		||||
      skip_models: Skip model list
 | 
			
		||||
    merge:
 | 
			
		||||
      success: Experiences merged successfully.
 | 
			
		||||
    new:
 | 
			
		||||
      description: Add new models by uploading files! If you upload a compressed archive, it will be extracted and become a single model containing all the files. If you upload individual files, they will each become a separate model.
 | 
			
		||||
      files:
 | 
			
		||||
        label: Select Files
 | 
			
		||||
      free_space: "(%{available} free)"
 | 
			
		||||
      library:
 | 
			
		||||
        help: The library to upload to.
 | 
			
		||||
      submit: Create models
 | 
			
		||||
      title: Upload
 | 
			
		||||
    problem:
 | 
			
		||||
      merge_all: Merge all
 | 
			
		||||
    scan:
 | 
			
		||||
      success: Model scan started
 | 
			
		||||
    show:
 | 
			
		||||
      download_preparing: Download is being prepared, please wait.
 | 
			
		||||
      download_requested: Download requested and will be ready soon, please wait.
 | 
			
		||||
      files: Files
 | 
			
		||||
      files_card:
 | 
			
		||||
        bulk_edit: Edit all files
 | 
			
		||||
        heading: Files
 | 
			
		||||
      followers: Followers
 | 
			
		||||
      license: License
 | 
			
		||||
      merge:
 | 
			
		||||
        heading: Merge
 | 
			
		||||
        warning: Merging moves all files from this model to the target, and removes this model. File metadata is preserved, but any model metadata will be lost!
 | 
			
		||||
        with: Merge with
 | 
			
		||||
      model_details: Model Details
 | 
			
		||||
      organize:
 | 
			
		||||
        button_text: Organize files
 | 
			
		||||
        confirm:
 | 
			
		||||
          are_you_sure: Are you sure you want to do this?
 | 
			
		||||
          'no': No, cancel
 | 
			
		||||
          summary_html: The folder and files that make up this model will be moved from:<br> <code>%{from}</code><br> to<br> <code>%{to}</code>
 | 
			
		||||
          'yes': Yes, move the files
 | 
			
		||||
      path: Path
 | 
			
		||||
      preview: This is just a preview of the complete model, which contains %{count} more files. Contact the model owner to get full access.
 | 
			
		||||
      rescan: Rescan files
 | 
			
		||||
      search: Search the Internet for models with this name
 | 
			
		||||
      submit: Upload Files
 | 
			
		||||
      tags: Tags
 | 
			
		||||
      upload_card:
 | 
			
		||||
        heading: Upload
 | 
			
		||||
    update:
 | 
			
		||||
      success: Model details saved.
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue